我在React的LifeCycle方法上关注this guide,并对该指南中的演示进行了调整,有点像https://codesandbox.io/s/m7m4qz6pqp
这是一个简单的应用程序,它使用了React的所有新生命周期方法,并每10秒将网格添加到底部(因此请等待10秒,然后查看控制台)。
我了解 getDerivedStateFromProps 的方式是,当父项道具发生更改时它们会被调用,但是在此沙箱中(如果您检查控制台),即使道具没有更改也会被调用。
我添加了一些有用的console.log
来跟踪订单。
现在,它在控制台
中显示getDerivedStateFromProps - 1, 4
render - 2, 6
render - 2
componentDidMount - 3
getDerivedStateFromProps - 1, 4
这意味着
getDerivedStateFromProps
由于1, 4
被称为1st
由于render
,2, 6
被称为第二
错误组件的render
在我们可以忽略的之后被调用
由于componentDidMount
3
被称为3rd
由于getDerivedStateFromProps
1, 4
被称为第四名
现在,我了解其他所有命令。我只是不明白为什么getDerivedStateFromProps
被第四次称为1, 4
。
有人能解释为什么会这样吗,因为我第一次见不到道具就变了吗?
答案 0 :(得分:1)
首先在React 16.3版本中,在更新props(http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/)时才调用getDerivedStateFromProps()。但是现在在React 16.4版本中,在更新道具和更新状态时调用getDerivedStateFromProps()
(无论重新渲染的原因如何)。所以根据您的情况,
getDerivedStateFromProps()
在render()方法之前被调用;
每10秒钟更新一次块,将呈现您的组件,因此,每10秒钟将调用getDerivedStateFromProps()
。