【发布时间】:2020-01-06 08:11:48
【问题描述】:
当我偶然发现这个时,我正在使用 React LifeCycle 方法:
当我看到 render() 函数运行 2 次时,我感到很困惑。我所知道的是 React Life-Cycle 中的任何函数都只运行一次。那么,为什么我在这里看到 2 个渲染函数(或运行 2 次)。不会影响第二次运行的内存和过度使用。
此外,我们如何知道渲染函数将在哪里运行(或在什么阶段),因为它可以在 React Cycle 中的两个地方运行。金迪,帮忙澄清一下。
参考:
https://gist.github.com/bvaughn/923dffb2cd9504ee440791fade8db5f9
【问题讨论】:
-
你在哪里看到它运行了 2 次?它在安装时运行一次,在更新时运行一次。这是两件不同的事情
-
第一个是挂载期间的初始渲染调用,第二个是每个后续渲染。
-
“我所知道的是 React Life-Cycle 中的任何函数都只运行一次”——这根本不是真的。其中一些在组件的生命周期中只运行一次,例如
componentDidMount或componentWillUnmount,但其中一些可以运行无限次,例如render或componentWillUpdate。至于你的问题,render在组件挂载时运行,and 每次状态或道具改变时,除非你实现一个自定义的shouldComponentUpdate函数,你可以用它来查看当前和以前的道具/状态并手动控制它是否应该重新渲染 -
如果父级重新渲染,渲染也可以重新运行,尽管有一些方法可以避免这种情况(这是一个好主意,因为您可能并不总是希望重新渲染一个组件,因为它父级重新渲染)。有关于如何做到这一点的帖子/文章
-
OP,根据这个列表,您不会认为渲染只运行两次,是吗?整个 Updating 部分将在安装组件时反复运行多次。
标签: javascript reactjs react-component react-lifecycle-hooks