我在博客中阅读了以下声明,内容如下:
useEffect(() => {
API.getUser(userId);
}, [userId]);
第二个参数也可以只是一个空数组,在 在这种情况下,它将仅在
componentDidMount
上执行componentWillUnmount
,并且效果不会在componentDidUpdate
上产生。
卸载组件(API.getUser
)时是否执行componentWillUnmount
?据我所知componentWillUnmount
在您从A页转到B页时触发。对于我来说,我现在感到困惑,上面的代码就像componentDidMount
一样,因为userId
将从{{1 }}到undefined
一次。
答案 0 :(得分:1)
您对措辞有些困惑,它不是传递空数组时在卸载时执行的效果,而是清除功能,它是将在useEffect中返回的功能。
例如,您可以具有上述效果
useEffect(() => {
API.getUser(userId);
return () => {
// cancel api here
}
}, [userId]);
因此在上面的示例中,将在第二次运行效果之前(在userId更改时发生)或在卸载时调用useEffect返回的匿名函数
答案 1 :(得分:0)
您可以从useEffect返回清除功能,该功能将在unMount之前运行
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
};
}, []);