湖北省工程建设协会网站,手机网络营销方案,济南做网站最好的公司,深圳哪家装修公司口碑最好在 React 中#xff0c;useEffect 钩子可以被看作是函数组件中的一种副作用管理工具#xff0c;它的行为可以模拟类组件中的不同生命周期方法。useEffect 的执行时机取决于其依赖项数组#xff08;第二个参数#xff09;的设置方式。 根据 useEffect 的使用方式#xff0c… 在 React 中useEffect 钩子可以被看作是函数组件中的一种副作用管理工具它的行为可以模拟类组件中的不同生命周期方法。useEffect 的执行时机取决于其依赖项数组第二个参数的设置方式。 根据 useEffect 的使用方式它可以对应以下几种类组件生命周期方法
1、 componentDidMount组件挂载 当你传递一个空的依赖数组 [] 时useEffect 相当于 componentDidMount即只在组件首次挂载时运行。 useEffect(() {// 只在组件首次挂载时运行console.log(Component mounted);
}, []); // 空数组作为依赖项等效于类组件的
componentDidMount() {console.log(Component mounted);
}2、 componentDidUpdate组件更新 如果 useEffect 的依赖数组中包含某些特定的状态或 props当这些值发生变化时useEffect 会在组件更新时重新执行相当于 componentDidUpdate。 useEffect(() {// 只在组件首次挂载时运行console.log(Component mounted);
}, []); // 空数组作为依赖项等效于类组件的
componentDidUpdate(prevProps, prevState) {if (prevState.someState ! this.state.someState) {console.log(Component updated because someState changed);}
}3、 componentWillUnmount组件卸载 useEffect 可以返回一个清理函数这个清理函数在组件卸载时或依赖项更新时执行相当于 componentWillUnmount。 useEffect(() {console.log(Component mounted);return () {console.log(Component will unmount);};
}, []); // 空数组表示只在卸载时清理等效于类组件的 componentWillUnmount() { console.log(‘Component will unmount’); }
4、 componentDidMount componentDidUpdate 如果不传递依赖数组useEffect 会在每次组件渲染后执行相当于同时模拟了 componentDidMount 和 componentDidUpdate。 useEffect(() {console.log(Component mounted or updated);
});等效于类组件的
componentDidMount() {console.log(Component mounted);
}componentDidUpdate() {console.log(Component updated);
}5、React生命周期总结
React 17版本之前
React 17版本之后 在新的生命周期中react弃用了componentWillMount、componentWillReceiveProps、componentWillUpdate这三个钩子取而代之的是getDerivedStateFromProps,其实就是把那三个钩子的含义融入到了这一个钩子中写法如下
static getDerivedStateFromProps(props, state) {console.log(getDerivedStateFromProps---props, state:, props, state)// 如果return null 则依然以原来的规则更新state否则会锁定更新statereturn null// return {a:11}}