反应清理功能,怎么了?

时间:2020-10-19 14:47:45

标签: reactjs use-effect

关于使用useEffect进行反应的官方文档清理功能,仅应在组件销毁之前调用一次。 enter image description here

因此,关于此信息,我制作了一个组件,并添加了一些代码,例如让它成为下一个。

useEffect(() => {
  console.log('didmount')
  return () => {
    console.log('will unmount2')
  }
})

我希望看到几个didmount控制台,具体取决于我要更改其道具的次数,并且在更改路线之前只有一个“ will mount2”,因此组件将被破坏, 但实际结果是下一个enter image description here

我刚刚错过了什么?

2 个答案:

答案 0 :(得分:2)

您不理解或未完全阅读文档。

此外,如果一个组件渲染多次(通常如此),则在执行下一个效果之前会清除上一个效果。在我们的示例中,这意味着每次更新都会创建一个新的订阅。

更改道具会使组件重新渲染。依次导致执行清理功能。

对于您的示例,这意味着您应该在控制台中看到服务器didmountwill unmount2,具体取决于重新渲染组件的次数。

答案 1 :(得分:1)

您好,函数中的Artem缺少第二个参数,就是依赖项数组,如果没有此数组,将导致无限循环,建议尝试此

// this will run exactly when the unmount component, not when the effects finishing running
useEffect(() => {
    return () => {
        console.log('unmount')
    }
}, [])