关于使用useEffect进行反应的官方文档清理功能,仅应在组件销毁之前调用一次。
因此,关于此信息,我制作了一个组件,并添加了一些代码,例如让它成为下一个。
useEffect(() => {
console.log('didmount')
return () => {
console.log('will unmount2')
}
})
我希望看到几个didmount控制台,具体取决于我要更改其道具的次数,并且在更改路线之前只有一个“ will mount2”,因此组件将被破坏, 但实际结果是下一个
我刚刚错过了什么?
答案 0 :(得分:2)
您不理解或未完全阅读文档。
此外,如果一个组件渲染多次(通常如此),则在执行下一个效果之前会清除上一个效果。在我们的示例中,这意味着每次更新都会创建一个新的订阅。
更改道具会使组件重新渲染。依次导致执行清理功能。
对于您的示例,这意味着您应该在控制台中看到服务器didmount
和will unmount2
,具体取决于重新渲染组件的次数。
答案 1 :(得分:1)
您好,函数中的Artem缺少第二个参数,就是依赖项数组,如果没有此数组,将导致无限循环,建议尝试此
// this will run exactly when the unmount component, not when the effects finishing running
useEffect(() => {
return () => {
console.log('unmount')
}
}, [])