【问题标题】:Why componentDidUpdate trigger when prevState/prevProps are same as this.state/this.props为什么在 prevState/prevProps 与 this.state/this.props 相同时触发 componentDidUpdate
【发布时间】:2016-04-20 10:51:43
【问题描述】:

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

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    componentDidUpdate() 每次父组件重新渲染(并传入新的道具)时都会触发。在有状态的组件中,每当setState() 被触发时。

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

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

    【讨论】:

    • 非常感谢。我也想接受你的解决方案。我接受了另一个,因为他的声望较低。但我有一个问题。我现在就贴出来。愿你看到这个 - stackoverflow.com/q/36743571/1828637
    【解决方案2】:

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

    不,React 每次都会将所有内容呈现给 VirtualDOM。但随后它只更新真实 DOM 中更改的属性。

    为避免这种情况,您可以使用PureRenderMixinshouldComponentUpdate 中的自定义比较代码。

    【讨论】:

    • 谢谢 我想避免 mixins,因为我听说它们已被弃用。我现在正在使用shouldComponentUpdate,但我在确定prevProps 中的所有内容是否与this.props 中的所有内容相同时遇到问题,请您看看 - stackoverflow.com/q/36743571/1828637
    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 2021-10-20
    • 2022-11-17
    • 1970-01-01
    • 2019-04-27
    • 2021-08-05
    • 2019-11-12
    • 2018-06-11
    相关资源
    最近更新 更多