如何使用useEffect
钩子(或任何其他钩子)来复制componentWillUnmount
?
在传统的类组件中,我会做这样的事情:
class Effect extends React.PureComponent {
componentDidMount() { console.log("MOUNT", this.props); }
componentWillUnmount() { console.log("UNMOUNT", this.props); }
render() { return null; }
}
带useEffect
钩子:
function Effect(props) {
React.useEffect(() => {
console.log("MOUNT", props);
return () => console.log("UNMOUNT", props)
}, []);
return null;
}
(完整示例:https : //codesandbox.io/s/2oo7zqzx1n)
这是行不通的,因为返回的“清理”函数useEffect
捕获了挂载期间的props,而不是卸载期间props的状态。
如何在每次props更改useEffect
时不运行函数体(或清理)的情况下获得最新版本的props清理?
一个类似的问题没有解决获得最新props的部分。
该react文档状态:
如果您只想运行效果并仅将其清理一次(在装载和卸载时),您可以传递一个空数组 ([]) 作为第二个参数。这告诉 React 你的 effect 不依赖于来自 props 或 state 的任何值,所以它永远不需要重新运行。
然而,在这种情况下,我依赖于props......但仅用于清理部分......