【发布时间】:2016-04-20 10:51:43
【问题描述】:
我有一个组件,它的componentDidUpdate 似乎无缘无故触发。它是一个子组件,没有状态。即使prevProps 和this.props 的触发完全相同,这有什么原因吗?我认为更新应该只在props/state发生变化时触发?
【问题讨论】:
标签: reactjs
我有一个组件,它的componentDidUpdate 似乎无缘无故触发。它是一个子组件,没有状态。即使prevProps 和this.props 的触发完全相同,这有什么原因吗?我认为更新应该只在props/state发生变化时触发?
【问题讨论】:
标签: reactjs
componentDidUpdate() 每次父组件重新渲染(并传入新的道具)时都会触发。在有状态的组件中,每当setState() 被触发时。
即使旧的prevprops 和this.props 完全相同,如果父组件重新渲染,componentDidUpdate() 仍然会被触发。
如果你想防止 react 进入渲染周期,你应该实现 shouldComponentUpdate() 方法,在这里你可以比较新旧的 props。
【讨论】:
更新应该只在道具/状态发生变化时触发
不,React 每次都会将所有内容呈现给 VirtualDOM。但随后它只更新真实 DOM 中更改的属性。
为避免这种情况,您可以使用PureRenderMixin 或shouldComponentUpdate 中的自定义比较代码。
【讨论】:
shouldComponentUpdate,但我在确定prevProps 中的所有内容是否与this.props 中的所有内容相同时遇到问题,请您看看 - stackoverflow.com/q/36743571/1828637