react的hooks~

127 阅读3分钟

一、useEffect的使用

useEffect它接收两个参数,第一个参数为一个回调函数,第二个参数为回调函数依赖的值,只有当依赖的值发生改变才会执行第一个回调函数,或者第二个参数为空对象[ ]挂载成功的时候执行一次,当第二个参数为空的情况下,每次渲染都会执行。第一个参数的回调函数里面可以返回一个函数,该返回的函数在组件被卸载的时候执行。

code.png

useEffect官方给的例子是在组件挂载的时候订阅某某某,在卸载的时候取消订阅。useEffect可以创建多个、每一个可以做自己独立的事情。一个useEffect可以满足类组件中的componentDidMount、componentWillUnmount。

二、useContext的使用

createContext主要是针对嵌套层级较深的子孙组件,在没有出现useEffect之前函数式组件想要获取useContext的值需要嵌套非常深的层级。有了useContext现在只需要 const xxx = useContext(context创建的对象)。

code.png

三、useReducer的使用

useReducer是useState数据较为复杂的替代品,跟redux的使用很像,const [state,dispath] = useState(一个reducer函数,初始化的值)。因此我们首先得定义reducer,其次通过dispatch来修改state的值。这跟redux很像,但是每个组件只会维护自己的值,你在自己的组件对他进行的操作,其他的组件并 不会修改。 定义reducer

code.png

code.png

四、useCallBack的使用

useCallBack主要是用来做性能优化的,主要运用场景是父组件给子组件传递一个回调函数给子组件使用时,避免频繁创建该回调函数,当父组件render函数重新渲染时候,只要不是该子组件发生变化,这个回调函数就不会被重新创建。

code.png 当切换show的时候,没有被包裹的increment1会被重新渲染,而increment2没有被重新渲染,因为useCallback返回的是一个有记忆的函数,crement1被重新渲染。 code.png

五、useMemo的使用

useMemo主要接收两个参数,第一个参数为回调参数,第二个参数为该回调函数的依赖项(跟useEffect很像),跟vue中的computed较像,当设置依赖的值发生变成才会重新执行,useMemo可根据回调函数返回相应的值。

code.png

六、useRef的使用

useRef主要是用来操作类组件的DOM对象,调用组件的方法或者修改组件的innerhtml等。

code.png

七、forward和useImperative的使用

useRef主要是针对类组件,因为函数式组件没有组件实例,因此想要获取函数式组件需要通过forward方法,通过forward包裹的函数式组件,则多了第二个参数为ref。const MyComponent = forward((props,ref)=>{}),在直接绑定要我们要操作的元素上就可以了。

code.png 这里点击获取焦点的时候焦点被选中以及输入框的内容被改为hello world。

code.png react认为这是不安全的操作,你想要聚焦但是你还能改我的value值这显然不合理,因此使用useImperative来改变。现在只能聚焦却不能改变value的值。

code.png