setState для оконной переменной один раз в componentDidUpdate - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь установить свое состояние в глобальную переменную в моей функции componentDidUpdate. Однако это создает бесконечное l oop. Я предотвратил это, используя previousProps и проверив против this.props для других ситуаций, но в этой ситуации, как бы мне установить setState только один раз на основе моей переменной window?

componentDidUpdate(window.globalVar) {
    if (window.globalVar) {
        this.setState({
            lorem: window.globalVar
        });
    }
}

Ответы [ 2 ]

1 голос
/ 30 января 2020

Вы можете сделать это так

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
        });
    }
   }
}
1 голос
/ 30 января 2020

Рассмотрите возможность перемещения вашего кода на componentDidMount. Он будет вызываться только один раз, когда компонент монтируется. Это хорошее место для инициализации вашего состояния.

Еще одно хорошее место - использовать constructor вашего класса. Но в конструкторе просто присвойте window.globalVar государству. Не используйте setState

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

componentDidUpdate вызывается при каждом обновлении состояния. Чтобы предотвратить бесконечные обновления, вы должны сравнить предыдущее состояние с текущим состоянием до setState

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...