- Жизненный цикл
- Создание и иницилизация компонента
- Обновление компонента
- componentWillUnmount
- deprecated
- componentDidCatch
- Полезные ссылки
- constructor
- getDerivedStateFromProps
- componentDidMount
Можно
- Установите изначальное состояние компонента
- Задайте значение state
- “Привяжите”
this
к вашим функциям, если не используете стрелочные функции для методов - Создайте "связи" для взаимодействия с
DOM
узлами или элементами React, определяемыми в методеrender
.
Нельзя
- Не выполняйте никаких сайд-эффектов
Избегайте
- Копирования свойств
props
вstate
, они будут доступны и так. Исключением можно считать случай, когда мы хотим игнорировать обновленияprops
Статическая функция (нет доступа к this
), возращает объект или null
. Возвращаемый объект "вливается" в существующее состояние компонента.
Отрабатывает при инициализации компонента, изменении props
, setState
и this.forceUpdate
(с 16.4.2
).
Можно
- Синхронизируйте ваши
props
иstate
(замена устаревшему componentWillReceiveProps(nextProps)).
Нужно
- Определить, каким будет
DOM
Нельзя
- Не выполняйте
this.setState
- приведет к зацикливанию
Сигнализирует о том, что компонент и все его дочерние компоненты отрисовались без ошибок
Можно
- Установить счетчики/"листенеры"...
- Выполнить сайд-эффекты (Вызовы AJAX и т.д.)
Не рекомендуется
- Не стоит вызывать
this.setState
, так как это приведет к перерисовке
- getDerivedStateFromProps
- shouldComponentUpdate
- getSnapshotBeforeUpdate
- componentDidUpdate
Возвращает true/false. При false
процесс обновления останавливается.
При наследовании от PureComponent
от метод уже реализован и использует swallowEqual
Можно
- Определить свои правила обновления компонента
Нельзя
- Не выполняйте
this.setState
- приведет к зацикливанию
При сравнении объектов проверяется количество полей. Хорошее место для "нехорошего" хака
Можно
- Передать в componentDidUpdate третьим параметром дополниельные данные
Нельзя
- Не выполняйте
this.setState
- приведет к зацикливанию
Можно
- Установить счетчики/"листенеры"...
- Выполнить сайд-эффекты (Вызовы AJAX и т.д.)
- Выполнить
this.setState
, но вызов должен быть по условию, иначе приведет к зацикливанию
Нужно
- Удалить все назначенные счетчики/"листенеры"...
- Отменить AJAX запросы для этого компонента
Нельзя
- Не выполняйте
this.setState
- componentWillMount
- componentWillReceiveProps(nextProps)
- componentWillUpdate(nextProps, nextState)
Рекомендуется с версии 16.3
использовать эти методы жизненного цикла с префиксом UNSAFE
- UNSAFE_componentWillMount
- UNSAFE_componentWillUpdate
- UNSAFE_componentWillReceiveProps
В каком порядке вызываются методы
constructor()
static getDerivedStateFromProps()
UNSAFE_componentWillMount()
render()
componentDidMount()
В каком порядке вызываются методы
UNSAFE_componentWillReceiveProps()
static getDerivedStateFromProps()
shouldComponentUpdate()
UNSAFE_componentWillUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()
- Сообщает о "небезопасных" методах lifecycle
- Предупреждает об использовании устаревшего
ref API
- Сигнализирует о старом
context API
- Отслеживание неожидаемых сайд-эффектов
Отлавливает ошибки javascript во всех дочерних
компонентах
Принимает два параметра:
- error - текстовая ошибка, что мы видим в консоли
- info - объект с полем
componentStack
, которое предоставляет "путь" до ошибки
Можно вызвать setState
, чтобы обновить UI
Не отлавливает ошибки в:
- Обработчики событий (#
onClick
) - Асинхронный код (# Timeout)
- SSR
- Компонент с таким методом не ищет проблемы в самом себе