【问题标题】:ComponentDidUpdate calling infinte times with setStateComponentDidUpdate 使用 setState 调用无限次
【发布时间】:2020-02-15 06:04:08
【问题描述】:

你好,我正在尝试改变状态,改变一个对象,它被称为无限次

代码

componentDidUpdate (prevState) {
    if (prevState.tab !== this.state.tab) {
        this.setState((prevState) => ({
            ...prevState.tableConfiguration,
            columns: getColumnsConfig(this.state.tab)
        }))
    }
}

未捕获的不变违规:超出最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。 React 限制了嵌套更新的数量以防止无限循环。

任何建议

【问题讨论】:

  • 你的条件检查是在 state.tab 上,你不应该在 setState() 中更新它吗?
  • 您正在检查 tab 是否已更改,因为您正在更改 columns.. 而且您正在将 tableConfiguration 传播到正在改变您的形状的状态看起来不对的状态。
  • getColumnsConfig(this.state.tab) 是做什么的?
  • @HMR 将一个表的配置更改为另一个,例如,如果我有:表 1:狗,表 2 中的猫我有:马,鹦鹉
  • 您正在比较两个对象{} !== {} 始终为真,这会导致无限循环。

标签: reactjs


【解决方案1】:

感谢您的 cmets,我找到了一个解决方案。

componentDidUpdate (prevProps, prevState) {
    if (prevState.tab !== this.state.tab) {
        const newConfig = {
            ...prevState.tableConfiguration,
            columns: getColumnsConfig(this.state.tab)
        }
        this.setState({ tableConfiguration: newConfig })
    }
}

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 2019-04-24
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多