3

考虑以下代码

useEffect(effect, [v]) // v can be undefined

我只想在第一次渲染后或更改时运行该effect函数。v

我的问题是

  1. 我需要检查是否有v变化effect吗?或者我可以依靠 react 来检查依赖列表的值(即[v])。
  2. 如果 1. 的答案是后者,这种行为是否应该在不久的将来改变?例如,当并发模式被释放时。

反应官方文档

有条件地触发效果

效果的默认行为是在每次完成渲染后触发效果。这样,如果其依赖项之一发生更改,则始终会重新创建效果。

它说如果 one of its dependencies changes那么an effect is recreated。但是,它没有提到相反的情况:当且仅当其依赖项之一发生更改时,才会重新创建效果。

我只记得在hook的早期,我在某处读到该effect函数在某些情况下即使不更改也可以运行,v以优化内存,还是在并发模式下?我实在记不太清了,也查不到出处。

如果有人能告诉我 React 到底是怎么做的,或者参考 react 的相关内部源代码,那将非常有帮助。我认为他们会对第一次渲染进行特殊检查,否则,在vundefined一次渲染之后,effect将不会运行。

4

1 回答 1

0

我还在此处发布了有关 react repo 的问题。该线程帮助我解决了我的问题。

希望它也对其他人有所帮助。

于 2021-05-21T02:49:12.263 回答