前言:在使用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)
参考: