我正在尝试在componentDidUpdate
函数中将状态设置为全局变量。但是,这会造成无限循环。在其他情况下,我已经使用previousProps
并针对this.props
进行了检查,但是在这种情况下,如何基于我的window
变量只设置一次setState?
componentDidUpdate(window.globalVar) {
if (window.globalVar) {
this.setState({
lorem: window.globalVar
});
}
}
考虑将代码移至componentDidMount
。安装组件后,它将仅被调用一次。这是初始化状态的好地方。
另一个好地方是使用您班级的constructor
。但是在构造函数中,只需将window.globalVar
分配给状态即可。不要使用setState
constructor () {
this.state = { lorem: window.globalVar }
}
componentDidUpdate
在每次状态更新时被调用。为了防止无限更新,您必须在setState
您可以这样操作
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
});
}
}
}