Диспетчеризация избыточных действий в React componentDidUpdate - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь отправить избыточное действие в методе жизненного цикла componentDidUpdate, однако это приводит к бесконечному циклу, вызывающему сбой приложения.Вот код, который у меня сейчас есть:

   componentDidUpdate(prevProps, prevState) {
    const { dispatch, sockOpen, user } = this.props;
    if (
      navigator.onLine &&
      user &&
      (sockOpen !== prevProps.sockOpen || sockOpen)
    ) {
      dispatch(pollStartAction());
      this._checkSessionIntervalId = setInterval(
        this.checkActiveSessions,
        5000
      );
    }
  }

Это правильный способ сделать это или лучше написать это, что не приведет к бесконечному циклу рендеринга.Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Ваша логика неверна.В (sockOpen !== prevProps.sockOpen || sockOpen), когда sockOpen истинно, всегда запускает логику pollStartAction().Если вы хотите, чтобы это запускалось один раз, когда оно становится истинным, тогда вам нужно, чтобы оно было && sockOpen.

0 голосов
/ 10 сентября 2018

Предположительно, отправкой этого действия является обновление хранилища, которое обновляет реквизиты, что снова вызывает componentDidUpdate. Обычный способ обойти это - иметь какое-то условие, которое в конечном итоге останавливает повторную отправку действия, что похоже на то, что вы пытаетесь сделать, но это условие всегда оценивается как true. Не зная точно, что означают части этого условия, я бы предположил, что проблема в чем-то:

(sockOpen !== prevProps.sockOpen || sockOpen)

всякий раз, когда sockOpen верен, отправка будет выполняться, и вы будете зацикливаться. Всякий раз, когда значение sockOpen отличается от предыдущего обновления, оно также будет зациклено. Таким образом, даже если sockOpen ложный, он все равно будет зациклен, если sockOpen был правдивым в прошлый раз. Это означает, что если sockOpen всегда правдив, цикл становится бесконечным, поскольку, даже если что-то и делает sockOpen falsey, это было правдой в последнем цикле, а первая часть этого предложения или условия истинна.

Вам необходимо выяснить, в каких условиях эта отправка НЕ ​​должна происходить, установить условия условного соответствия, и, что самое важное, убедиться, что этот набор условий возможен!

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