setState一次在componentDidUpdate上设置为窗口变量

问题描述 投票:0回答:2

我正在尝试在componentDidUpdate函数中将状态设置为全局变量。但是,这会造成无限循环。在其他情况下,我已经使用previousProps并针对this.props进行了检查,但是在这种情况下,如何基于我的window变量只设置一次setState?

componentDidUpdate(window.globalVar) {
    if (window.globalVar) {
        this.setState({
            lorem: window.globalVar
        });
    }
}
reactjs components
2个回答
0
投票

考虑将代码移至componentDidMount。安装组件后,它将仅被调用一次。这是初始化状态的好地方。

另一个好地方是使用您班级的constructor。但是在构造函数中,只需将window.globalVar分配给状态即可。不要使用setState

constructor () {
    this.state = { lorem: window.globalVar }
}

componentDidUpdate在每次状态更新时被调用。为了防止无限更新,您必须在setState

之前将上一个状态与当前状态进行比较

0
投票

您可以这样操作

componentDidUpdate(prevProps, prevState) {
  if(window.globalVar !== undefined){   // window.globalVar is not undefined
    if (prevState.lorem !== window.globalVar) { // prevState.lorem is not equal to window.globalVar
        this.setState({
            lorem: window.globalVar
        });
    }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.