为什么 React 中的 cleanUp 仅在依赖项数组为空时才在卸载时运行?

问题描述 投票:0回答:1

React 文档说,如果你想运行一个效果并只清理一次(在挂载和卸载时),你可以传递一个空数组([])作为第二个参数。

但是如果在useEffect中将某些值传递给依赖数组,则与行为相矛盾。

例如:

useEffect(()=> {
  console.log('effect ran')
  return cleanupAction(){console.log('cleanup action')}
}, [props.value])

对于每个渲染,当效果运行时,将在下一次渲染之前运行清理。 因此,仅当效果运行时才会运行清理。

但在其他情况下。

useEffect(()=> {
  console.log('effect ran')
  return cleanupAction(){console.log('cleanup action')}
}, [])

在这种情况下,效果将仅在第一次渲染时运行。我希望清理工作仅在第二次渲染之前运行。那么,为什么清理会在卸载时运行。

因为,我认为,当渲染导致效果运行时。清理将在下次渲染之前运行。所以,在这种情况下不会发生。

reactjs react-hooks dependencies react-state-management
1个回答
0
投票

我的理解是,由于依赖项数组为空,useEffect 将仅在安装相应组件后的第一次渲染中调用,而不是在后续渲染后调用。如果有任何依赖项,则在再次运行效果(下一次调用)之前运行清理函数已经改变,这在这里是不可能的,但假设组件是有条件渲染的,所以当它被卸载时,清理函数肯定会运行。 如有错误请指正。

© www.soinside.com 2019 - 2024. All rights reserved.