hooks

119 阅读2分钟

1.为什么要使用hooks?

react中function组件是没有自己的状态和生命周期的。如果你想在不编写class组件的情况下使用state和生命周期方法,可以通过hooks。

2.在hooks使用useState,是函数式组件有状态。

useState本身是一个函数,来自于react,有参数和返回值。

数组的第一个值是state(当前状态),第二个值是函数,这个函数可以修改和设置状态。

图片.png 图片.png

使用useState写一个累加器

图片.png

图片.png

3.function组件多状态

图片.png

4.较为复杂状态

图片.png

5.useState传递函数。

图片.png

4.function组件实现生命周期(useEffect)。

4.1class生命周期

  • componentDidMount:在这个周期里面,组件是第一次渲染完成的,dom节点已经生成了。
  • componentDidUpdate:在这个周期里面实现更新。
  • componentWliiUnmount:在这个周期里,我们可以清除定时器和卸载一些监听事件。

4.2useEffect:函数式组件是没有生命周期的,就可以使用useEffect来代替。我们可以把useEffect看做组件加载、组件更新、组件卸载的三个生命周期方法的组合。

图片.png

默认情况下,useEffect会在第一次渲染之后和每次更新之前都会执行.useEffect每一次渲染(不管是第一次或者是更新)完都会去执行

图片.png

useEffect第一个参数为函数,后面跟着数组,数组传入的是你想要改变状态的依赖。如果数组为空,那么useEffect只有在第一次渲染的时候才执行。

图片.png

useEffect组件卸载

图片.png

5.useRef

useRef:第一次渲染的时候创建一个对象滞后,之后重新渲染的时候,如果发现对象对象已经创建过,不再创建新的ref对象,useRef的性能要比createRef好一些。

图片.png

6.useReducer:再hooks中,可以为函数式组件提供类似的Redux的功能,类似于vuex都是提供状态管理的.官方提供两种state管理:useState,useReducer.

useReducer接收两个参数,第一个参数reducer函数,第二个参数是初始值

图片.png