props更新,componentDidUpdate 没有触发

IT技术 reactjs react-props react-lifecycle
2021-05-20 11:57:16

是否存在 componentDidUpdate 不会触发的情况,即使在 React 中更新了 props?

4个回答

有 3 种情况会导致 componentDidUpdate 不触发:

1) 您编写了一个返回 false 的自定义 shouldComponentUpdate。

2)内部react方法确定虚拟DOM没有变化,所以选择不重新渲染。

3) 你扩展了 React.Component 以外的东西(比如 PureComponent),它有一个返回 false 的默认 shouldComponentUpdate 方法。

您可以通过在shouldComponentUpdate(). 所以是的,在这种情况下componentDidUpdate()不会触发。

如果您的组件在列表中并且组件更改(即在每次渲染时)或键丢失或键重复等,也会发生这种情况

详情请参阅文档:https : //reactjs.org/docs/lists-and-keys.html

发生这种情况的一种常见情况是发生多个 prop 更改而不会影响虚拟 DOM 中的任何内容。

例如,如果 API 返回 200 状态代码,您可能希望显示成功消息,props更改如下:

未调用 API:

this.props.apiState == false

API调用:

this.props.apiState == 'loading'

API 成功:

this.props.apiState == 'success'

在这种情况下componentDidUpdate只会触发一次,如果您this.props.apiState在触发时控制台日志,您将看到它是loading. 因此componentDidUpdate,等待中的任何触发器success都不会发生。

ComponentWillReceiveProps在旧版本的 React 中处理这个问题,在较新版本的 React 中,您可以使用shouldComponentUpdate在发生所需的 prop 更改时强制更新。