оригинал:How to use React Lifecycle Methods
Жизненный цикл реакции
Обычно делится на три категории
- Mount
- Update
- Unmount
Mount
- constructor()
componentWillMount()- render()
- componentDidMount()
Update
componentWillReceiveProps()/ static getDerivedStateFromProps()- shouldComponentUpdate()
componentWillUpdate()/ getSnapshotBeforeUpdate()- render()
- componentDidUpdate()
Unmount
- componentWillUnmount()
Жизненный подход
componentWillMount (скоро)
componentWillMount()
Когда React визуализирует компонент, вы сначала вводите этот метод.
Примечание:componentWillMount()
является единственным вrender()
Метод жизненного цикла, который был вызван ранее. Поэтому это единственный метод, вызываемый при рендеринге на стороне сервера.
потому чтоcomponentWillMount()
Будет удален, рекомендуется использовать официальныйconstructor()
Альтернатива этого метода
**Обновление.** Этот метод следует избегать в новом коде.
State
можно использовать в этом методеthis.setState()
Но не обязательно вызывать повторный рендеринг.
componentDidMount
componentDidMount()
Когда этот метод вызывается, React уже отрендерил компонент и вставил его в DOM. Поэтому, если есть какая-либо инициализация, зависящая от DOM, она должна быть здесь.
State
можно использовать в этом методеthis.setState()
метод, который вызовет повторный рендеринг.
Use Cases
- fetch data
- Зависит от инициализации DOM
- Добавить прослушиватель событий
componentWillReceiveProps (скоро)
componentWillReceiveProps(nextProps)
Когда компонент получает новыйprops
, метод будет вызываться первым, но следует отметить, чтохотяprops
не изменилось, метод также будет вызываться, поэтому при использовании этого метода обязательно сравнитеthis.props
а такжеnextProps
, чтобы избежать ненужного рендеринга.
Обновлять:componentWillReceiveProps
будет удален, используйте новыйstatic getDerivedStateFromProps
заменять.
Статические getderedstatefromprops (новый)
static getDerivedStateFromProps(props, state)
каждый разrender
вызовет этот метод, даже еслиprops
Ничего не изменилось.Так что используйте его экономно.
shouldComponentUpdate
shouldComponentUpdate(nextState, nextProps)
Иногда вам нужно избежать лишнего рендеринга, вы можете использовать этот метод. вернутьfalse
означает, что React не выполняетсяcomponentWillUpdate()
,render()
,componentDidUpdate()
.
Этот метод не выполняется во время инициализации.
**Примечание.** Согласно документации React, React можетshouldComponentUpdate
Это рассматривается как приглашение, а не строго в соответствии с его возвращаемым результатом, чтобы решить, выполнять или нет, то есть может показаться, чтоshouldComponentUpdate
вернутьfalse
, но повторный рендеринг все равно происходит.
State
нельзя установить в этом методеsetState
.
Use Case
Как упоминалось ранее, этот метод может быть проблематичным. React официально предоставляет другое решение, поэтому, если вы обнаружите, что компонент работает медленно, вы можете использоватьReact.PureComponent
заменятьReact.component
, Так и будетprops
а такжеstate
Обеспечьте неглубокий контроль.
componentWillUpdate (скоро)
componentWillUpdate(nextProps, nextState)
Этот метод вызывается перед визуализацией.shouldComponentUpdate
в новомprops
в компонент илиstate
Вызывается при смене.
Этот метод не вызывается во время первоначального рендеринга.
Обновлять:shouldComponentUpdate
Собирается быть удален.
State
не может быть вызван в этом методеsetState
.
Use Cases
shouldComponentUpdate
метод вrender()
будет вызываться точно перед этим, поэтому выполнение каких-либо операций, связанных с DOM, в этом методе нецелесообразно, так как срок его действия скоро истечет.
Общие варианты использования:
- согласно с
state
Изменения задают переменную - событие отправки
- начать анимацию
getSnapshotBeforeUpdate
getSnapshotBeforeUpdate(prevProps, prevState)
Этот метод был добавлен в React 16.3 и работает сcomponentDidUpdate
. Этот метод должен переопределить старый методshouldComponentUpdate
все варианты использования.
getSnapshotBeforeUpdate
Вызывается перед визуализацией элемента и записью в DOM, таким образом вы получаете информацию о DOM (например, позицию прокрутки) до обновления DOM.
должен вернутьsnapshot
значение илиnull
, независимо от того, что возвращается,shouldComponentUpdate
может получитьsnapshot
параметр.
Use Cases
Если вы хотите получить список или положение прокрутки в окне чата, вы можетеgetSnapshotBeforeUpdate
получить эту информацию. Затем поместите информацию о прокрутке какsnapshot
возвращаемое значение. Это позволяет после обновления DOMcomponentDidUpdate
Установите правильное положение прокрутки в .
componentDidUpdate
componentDidUpdate(prevProps, prevState, snapshot)
После того, как React обновит компонент, вызовитеcomponentDidUpdate
. Этот метод не будет вызываться во время первоначального рендеринга.
Use Cases
Используйте этот метод, если вам нужно манипулировать DOM после обновления компонента.
componentWillUnmount
componentWillUnmount()
Этот метод вызывается перед выгрузкой, уничтожая компонент.
State
Состояние не может быть установлено при выгрузке компонента
Use Cases
Используйте этот метод для очистки действий.
- удалить в
componentDidMount
или прослушиватели событий, добавленные в другом месте - Отключить сетевой запрос
- очистить таймер
- очистить
componentDidMount
DOM-элементы, созданные в