是否存在 componentDidUpdate 不会触发的情况,即使在 React 中更新了 props?
props更新,componentDidUpdate 没有触发
IT技术
reactjs
react-props
react-lifecycle
2021-05-20 11:57:16
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 更改时强制更新。