@danilr

Почему зацикливается и как этого избежать?

componentWillUpdate() {
        console.log('componentWillUpdate');
        const {pageScroll} = this.props;
        this.setState({
            availableHeight: pageScroll ? document.querySelector('#page').clientHeight : findDOMNode(this) ? findDOMNode(this).clientHeight : 0
        });
    }

Подскажите почему уходит в бесконечный цикл и как этого избежать?
Сама проблема в том, что мне надо чтобы availableHeight был высотой компонента. Изначально вызывал setState в WillMount, но почему то он считал высоту с отстованием в один шаг.
  • Вопрос задан
  • 312 просмотров
Решения вопроса 2
@real2210
Потому что ты устанавливаешь состояние -> компонент ре-рендерится -> срабатывает will update -> ты устанавливаешь сосотояние -> компонент ре-рендерится ...
Ответ написан
Комментировать
rockon404
@rockon404 Куратор тега React
Frontend Developer
Варианты:
1. Использовать componentDidMount.
2. Если вы никак не изменяете состояние во время работы компонента, вам следует отказаться от использования state и использовать props напрямую.
3. Делать обновление состояния по изменению определенного свойства:
componentDidUpdate(prevProps) {
  if (prevProps.someProp !== this.props.someProp) {
    this.setState({ ... });
  }
}


componentWillUpdate - не рекомендован к использованию, используйте вместо него componentDidUpdate.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы