为什么在 prevState/prevProps 与 this.state/this.props 相同时触发 componentDidUpdate

IT技术 reactjs
2021-05-07 05:19:01

我有一个组件,它componentDidUpdate似乎无缘无故地触发。它是一个子组件,没有状态。即使prevPropsthis.props的触发完全相同,有什么原因吗?我认为更新应该只在props/发生变化时触发state

2个回答

componentDidUpdate()每次父组件重新渲染(并传入新的props)时都会触发。并且在有状态组件中也可以在任何时候setState()被触发。

即使旧的prevpropsthis.props完全一样,componentDidUpdate()如果父组件重新渲染仍然会被触发。

如果你想阻止 react 进入渲染周期,你应该实现该shouldComponentUpdate()方法,在那里你可以比较新旧 props。

更新应该只在props/状态发生变化时触发

不,React 每次都将所有内容渲染到 VirtualDOM。但随后它只更新真实 DOM 中已更改的属性。

要避免这种情况,您可以使用PureRenderMixin或您的自定义代码比较- shouldComponentUpdate