初学react对HOOK中的useState和useEffect的理解

49 阅读2分钟

HOOK部分

1. 什么是HOOK?

Hook是react16.8新增加的功能,它是react官方让你不使用class组件的方式,让函数组件也可以实现相同的功能,而且这种写法更加简单,更加完善,也是react官方推荐使用的语法。

2. useState

useState它的本质是一个函数,是在hook里面使用状态管理的功能。 useState - 它里面有一个参数,是我们传入状态的初始值。 - 他有一个返回值,返回的是一个数组,数组的第一项是当前值的状态,数组的第二项是改变当前值的函数。 - 函数中可以有多个状态。

注意细节

1. 声明一个状态尽量写在函数开头,或者函数前面。
2. 不要把它放到代码段中,或者循环,判断中。
3. 如果在改变状态的时候,当前状态的值会和之前状态的值进行比对(object.is()),如果发生了变化就重新渲染,没有变化就不会渲染,这也是做出优化的一个点。
4. 改变数据的时候,不会和原来的值进行合并,而是会直接替换。假如说刚开始存了一个对象,但是只改变对象里面的一个值,那么可以用展开运算符。
5. 强制刷新的实现 
​
 ```js
 const [, forceUpdate] = useState({})
   ...
 onClick={() =>{
 forceUpdate({})
 }}
 ```

3.useEffect

useEffect:是处理HOOK中的副作用操作,如果发送ajax请求,计时器,异步操作,本地存储。 useEffect: 里面有一个参数,参数是一个函数,用做处理副作用操作。

细节

  1. useEffect它运行的时间点在界面渲染完成之后,因为它是异步的,不会阻塞浏览器加载。对比class组件中的compontDidMount和componentDidUpdate运行是在界面渲染完成之前,因为他们是同步的。

  2. 可以多次使用这个函数,但是不要放在代码段中。

  3. useEffect它可以有一个返回值:这个返回值要是一个函数,类似一个清理函数。假如在useEffect中使用一个计时器,当计时器从0加到10,判断加到10的时候我们去清除计时器,这里就需要用到这个清理函数。

    1. 清理函数运行事件要比副作用函数的时间提前
    2. 首次不会运行,组件销毁一定会运行。
  4. useEffect可以有两个参数:第二个参数为一个数组,如果是空数组的话,表示这个副作用函数只会运行一次,如果数组中有值的话,会监听这些值得变化,如果值没有发生改变,就不会在多次运行,只有监听的值发生了变化,才会重新调用副作用函数。