我在博客中读到下面的声明,它说的是这样的
useEffect(() => {
API.getUser(userId);
}, [userId]);
可选地,第二个参数也可以只是一个空数组,在 在这种情况下,它只会在
componentDidMount
和componentWillUnmount
,效果不会在componentDidUpdate
上运行。
当组件被卸载(componentWillUnmount
(时,API.getUser
是否被执行? 据我所知componentWillUnmount
当您从页面 A 转到页面 B 时触发。我现在很困惑,对我来说,上面的代码就像componentDidMount
,因为userId
会从undefined
更改为id
一次。
你对措辞有点困惑,它不是在卸载时传递空数组时执行的效果,而是清理函数,它是从useEffect中返回的函数,将被执行。
例如,您可以获得上述效果,例如
useEffect(() => {
API.getUser(userId);
return () => {
// cancel api here
}
}, [userId]);
所以在上面的例子中,useEffect 返回的匿名函数将在效果第二次运行之前(在 userId 更改时发生(或卸载时
你可以从useEffect返回清理函数,该函数将在卸载之前运行
useEffect(() => {
const subscription = props.source.subscribe(); // this will fire at after did Mount/ didUpdate
return () => {
// Clean up the subscription
subscription.unsubscribe(); // this will afire at willUnmount
};
});
如果将空数组作为第二个参数传递。
useEffect(() => {
const subscription = props.source.subscribe(); // this run only after first rnede i.e componentDidmount
return () => {
// Clean up the subscription
subscription.unsubscribe(); // this will afire at willUnmount ie componentWillUnmount
};
}, []);