Жизненный цикл
1. Жизненный цикл компонента
Существует несколько стадий жизненного цикла, каждый из которых вызывает для компонента методы наследуемые от React.Component
. Мы можем переопределить их поведение добавив необходимый функционал, в рамках установленных правил.
2. Стадия монтирования
Следующие методы вызываются когда создается экземпляр компонента и добавляется в DOM.
Вызывается в момент создания экземпляра компонента, до того как компонент будет помещен в DOM.
Инициализирует начальное состояние компонента
Привязывает контекст в методах
Нельзя вызывать
setState()
В большинстве случаев явное указание конструтора излишне
Вызывается перед
render()
, при монтировании и перед всеми последующими вызовамиrender
, тоесть после обновленияstate
илиprops
.Можно использовать для того чтобы установить
state
в зависимости отprops
при каждом их изменении.Должен вернуть объект, которым будет обновлено состояние, или
null
если ничего обновлять не нужно.Нут доступа к
this
Позволяет декларативно описать интерфейс
Возвращает результат JSX-выражений, поддерево Virtual DOM
Нельзя вызывать
setState()
Вызывается сразу после монтирования в DOM
Делаем HTTP-запросы, вешаем кастомные слушатели событий и делаем операции с DOM
Вызов
setState()
в этом методе, вызовет ре-рендер - это нормально
3. Стадия обновления
Обновление может быть вызвано измением state
самого компонента или передаваемых ему props
. При обновлении необходимо перерендерить компонент, что ведет к вызову следующих методов.
Не вызывается при инициализации компонента
Вызывается перед ре-рендером уже существующего компонента
Необходим исключительно для оптимизации процесса рендера
По умолчанию
render
происходит каждый раз при новыхprops
илиstate
Позволяет сравнить текущие и предыдущие
state
иprops
, вернувtrue
илиfalse
указывая React есть ли необходимость обновлять компонентЕсли вернет
false
то не произойдетrender()
иcomponentDidUpdate()
Нельзя вызывать
setState()
Использовать необходимо очень аккуратно, только после замеров производительности, в противном случае может привести к обратному эффекту
Возможно стоит заменить на
React.PureComponent
, который будет делать поверхностное сравнениеprops
. Но только после замеров производительности
Вызывается перед тем, как все изменения готовы к добавлению в DOM
Можно использовать для получения DOM-значений перед обновлением, к примеру текущую позицию скрола
То что вернет этот метод, будет передано как третий параметр в
componentDidUpdate()
Вызывается сразу после обновления компонента
Не вызывается при первоначальном рендере компонента
Можно вызывать
setState()
, обязательно обернув его в условие проверки изменения предыдущих и следующихprops
иstate
, чтобы не возник бесконечный цикл.Можно делать HTTP-запросы
Можно передавать сторонним библиотекам новые данные
Если в компоненте есть
getSnapshotBeforeUpdate()
, то значение возвращаемое им будет передано третим аргументомsnapshot
, в противном случае его значением будетundefined
4. Стадия размонтирования
В какой-то момент компоненты будут удалены из DOM. При этом вызывается следующий метод.
Вызывается перед размонтированием и удалением элемента из DOM
Отлично подходим для уборки за собой: слушатели, таймеры, HTTP-запросы. В противном случае будут утечки памяти
Вызывать
setState()
нет смысла, компонент никогда не перерендерится
5. Обработка ошибок рендера
React очень любит класть все приложение при любой ошибке. Метод componentDidCatch
срабатывает при ошибке в дочернем компоненте и позволяет родительским компонентам отлавливать ошибки в детях, отображая запасной интерфейс. В результате, при ошибке, интерфейс не падает.
Используется для контроля ошибок
Ловит ошибки только в детях, но не в самом родителе
error
- результатtoString()
объекта ошибкиinfo
- объект описывающий stack trace
6. Дополнительные материалы
Last updated
Was this helpful?