关于useEffect的那些事

554 阅读1分钟

前言:在使用useEffect的过程中,踩到了一些坑,系统的总结整理一下它的使用方法吧!

1.基本用法

useEffect接受两个参数:

第一个参数是函数,在页面渲染后执行这个函数。

第二个参数是一个数组,这里注意:

参数效果
不传每次 render 后都执行
空数组只运行一次的 effect(仅在组件挂载和卸载时执行),相当于componentDidMount
一个值的数组比较该值有变化就执行
多个值的数组比较每一个值,有一个不相等就执行

2.注意事项

1.第二个参数一般情况下不要使用引用类型!会造成页面死循环

2.第二个参数一般不要使用第一个函数返回的数据,可能监听不到变化

3.如果有多个副效应,应该调用多个useEffect(),而不应该合并写在一起。

3.useEffect的返回值

副效应是随着组件加载而发生的,那么组件卸载时,可能需要清理这些副效应。

useEffect()允许返回一个函数,在组件卸载时,执行该函数,清理副效应。如果不需要清理副效应,useEffect()就不用返回任何值。

useEffect(() => {
  ChatAPI.subscribeToFriendStatus(props.id, handleStatusChange);
  return () => {
    ChatAPI.unsubscribeFromFriendStatus(props.id, handleStatusChange);
  };
});

4.useEffect的用途

只要是副效应,都可以使用useEffect()引入。 它的常见用途有下面几种。

1.获取数据(data fetching)

2.事件监听或订阅(setting up a subscription)

3.改变 DOM(changing the DOM)

4.输出日志(logging)

参考:

  1. react中文网
  2. 精读《useEffect 完全指南》
  3. hooks中useEffect()使用总结
  4. useEffect 的第二个参数
  5. useEffect第二个参数不能是引用类型