React的官方文件中提到:
如果您熟悉React类生命周期方法,您可以
将效果挂钩用作componentDidMount、componentDidUpdate和
组件将联合卸载
我的问题是-我们如何在钩子中使用componentWillMount()lifecycle方法
您不能在钩子中使用任何现有的生命周期方法(componentDidMount,componentdiddupdate,componentWillUnmount等)。它们只能在类组件中使用。对于挂钩,您只能在功能组件中使用。以下行来自React文档:
如果您熟悉React类生命周期方法,可以将
useEffectHook看作是componentDidMount,componentDidUpdate,以及componentWillUnmount的组合
建议是,您可以从功能组件中的类组件模拟这些生命周期方法
组件内部的代码在安装组件时运行一次使用效果此行为的挂钩等价物为
useffect(()=>{
//你的代码在这里
}, []);
注意这里的第二个参数(空数组)。这将只运行一次
如果没有第二个参数则会在组件的每个渲染上调用useffect钩子,这可能是危险的
useffect(()=>{
//你的代码在这里
});
componentWillUnmount用于清理(如删除事件侦听器、取消计时器等)。假设您正在componentDidMount中添加事件侦听器,并在componentWillUnmount中删除它,如下所示
componentDidMount(){
addEventListener('mousemove',()=>;{})
}
组件将卸载(){
window.removeEventListener('mousemove',()=>;{})
}
上述代码的等效吊钩如下所示
useffect(()=>{
addEventListener('mousemove',()=>;{});
//组件卸载时将调用返回的函数
返回()=>{
window.removeEventListener('mousemove',()=>;{})
}
}, [])