即使未更新父项道具,为什么还要再次调用getDerivedStateFromProps?

时间:2019-01-19 10:56:51

标签: javascript reactjs

我在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 由于render2, 6被称为第二 错误组件的render在我们可以忽略的之后被调用 由于componentDidMount 3被称为3rd 由于getDerivedStateFromProps

1, 4被称为第四名

现在,我了解其他所有命令。我只是不明白为什么getDerivedStateFromProps被第四次称为1, 4

有人能解释为什么会这样吗,因为我第一次见不到道具就变了吗?

1 个答案:

答案 0 :(得分:1)

首先在React 16.3版本中,在更新props(http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/)时才调用getDerivedStateFromProps()。但是现在在React 16.4版本中,在更新道具和更新状态时调用getDerivedStateFromProps()(无论重新渲染的原因如何)。所以根据您的情况,

在这种情况下,

getDerivedStateFromProps()在render()方法之前被调用;

  1. 初始安装
  2. 每个状态和道具更新

每10秒钟更新一次块,将呈现您的组件,因此,每10秒钟将调用getDerivedStateFromProps()