Начиная с версии 16.3, React вносит постепенные изменения в жизненный цикл. Устарели некоторые методы жизненного цикла и добавлены некоторые новые методы жизненного цикла.
оригинальный жизненный цикл
Оригинальная схема жизненного циклановый жизненный цикл
Новая диаграмма жизненного циклаУстаревшие методы жизненного цикла React
- componentWillMount
- componentWillReceiveProps
- componentWillUpdate
Хотя эти методы жизненного цикла были заброшены, реакция не удалила эти три метода, чтобы соответствовать совместимости версии, и также добавилUNSAFE_componentWillMount
,UNSAFE_componentWillReceiveProps
а такжеUNSAFE_componentWillUpdate
метод, в версии v16.3 можно использовать как старые, так и новые методы.
После версии 16.3v16.x
В версии старый и новый методы еще можно использовать, но использовать безUNSAFE_
Префиксные методы вызовут устаревшее предупреждение.
существуетv17
удалитcomponentWillMount
,componentWillReceiveProps
а такжеcomponentWillUpdate
, только сUNSAFE_
Префикс новых методов жизненного цикла, которые можно использовать.
Недавно добавленные методы жизненного цикла React
- getDerivedStateFromProps
- getSnapshotBeforeUpdate
Жизненный цикл компонента делится на: Смонтировать, обновить, удалить.
устанавливать
Когда компонент создается и вставляется в DOM, он вызывается в порядке следующих методов жизненного цикла.
- constructor()
- static getDerivedStateFromProps()
-
componentWillMount()/UNSAFE_componentWillMount()будет устаревшим - render()
- componentDidMount()
в определенииstatic getDerivedStateFromProps()
ВремяcomponentWillMount()/UNSAFE_componentWillMount()
будет недействительным.
constructor()
constructor(props)
Перед тем, как компонент React будет смонтирован, будет вызван его конструктор, который должен быть выполнен один раз внутри конструктора.super(props)
. больше не могуconstructor
Внутренний вызовthis.setState
.
Обычно используется:
- Дать
this.state
Инициализировать внутреннее состояние - Привяжите это к обработчику событий
static getDerivedStateFromProps()
static getDerivedStateFromProps(newProps,prevState)
Является静态方法
, переданный родительским компонентомnewProps
и текущий компонентprevState
Для сравнения, нужно обновить при судействеstate
, объект возвращаемого значения используется для обновленияstate
, вернуть, если не нуженnull
.
существуетrender()
метод вызывается до и вызывается при первоначальном монтировании и последующих обновлениях.
import * as React from "react";
class App extends React.Component{
constructor(props){
super(props);
this.state={
childDown:1,
num:0
}
}
static getDerivedStateFromProps(props,state){
if(props.isDown === state.childDown){
return {
num:state.childDown
}
}
return null
}
render(){
return(
<div>22</div>
)
}
}
componentWillMount()/UNSAFE_componentWillMount()устарел
Вызывается перед монтированием. существуетrender()
звонил раньше. вызов в этом методеsetState
не сработаетrender
.
Некоторые люди привыкли размещать запрос на этом этапе, но рекомендуется размещать его именно на этом этапе.componentMidMount()
середина.
При серверном рендеринге синхронизируйте данные в этом методе, но рекомендуется использоватьconstructor
для инициализации данных.
render()
render()
единственный метод, который должен быть реализован в компоненте.
react() используется для рендеринга и может возвращать следующие типы
- Реагировать на элементы
- массив или фрагменты
- Portals
- Строковый или числовой тип
- логическое значение или ноль
Функция render() должна быть чистой. не могу позвонитьsetState
.
componentDidMount()
Компонент загружен, и на этом этапе можно получить настоящий DOM.ajax请求
а также绑定事件
На этом этапе это должно быть вовремяcomponentWillUnmount()
Отмена. На этом этапе вы можете позвонитьsetState
,вызыватьrender
возобновить
-
componentWillReceiveProps()/UNSAFE_componentWillReceiveProps()устарел - static getDerivedStateFromProps()
- shouldComponentUpate()
-
componentWillUpdate()/UNSAFE_componentWillUpdate()устарел - render()
- getSnapshotBeforeUpdate()
- componentDidUpdate
имеютgetDerivedStateFromProps
илиgetSnapshotBeforeUpdate
час,componentWillReceiveProps()/UNSAFE_componentWillReceiveProps()
а такжеcomponentWillUpdate()/UNSAFE_componentWillUpdate()
неверный.
componentWillReceiveProps()/UNSAFE_componentWillReceiveProps()устарел
UNSAFE_componentWillReceiveProps(nextprops){}
Получите новые компоненты, установленные вprops
Вызванный ранее, обычно используйте этот метод для оценкиprops
обновить до и после измененийstate
.
Следует отметить, что если родительский компонент вызывает повторный рендеринг компонента, то даже еслиprops
Без изменений также называется вторичный метод.
Этот метод будет устаревшим, рекомендуется использоватьgetDeviedStateFromProps
.
import * as React from "react";
class App extends React.Component {
state = {
isWill: false,
};
componentWillReceiveProps(nextProps) {
if (this.props.cur !== nextProps.cur) {
this.setState({
isWill:
nextProps.cur > this.props.cur,
});
}
}
render(){
return(
<div>22</div>
)
}
}
static getDerivedStateFromProps()
Последовательный и крепление сцены.
shouldComponentUpdate()
shouldComponentUpdate(props,state)
В смонтированном компоненте, когдаprops
илиstate
Когда происходит изменение, оно вызывается перед рендерингом.
Сравните свойства родительского компонента с текущим состоянием и вернитеtrue/false
. Решите, следует ли запускать последующиеUNSAFE_componentWillUpdate()
,render()
а такжеcomponentDidUpdate()
.
Реагировать можетshouldComponentUpdate()
считаются слабыми директивами, даже еслиstate
дляfalse
Также можно привести к рендерингу компонентов.
import * as React from "react";
class App extends React.Component {
state = {
isWill: false,
};
shouldComponentUpdate(props,state){
if(props.val !== state.val){
console.log("shouldComponentUpdate");
return true
}
}
render(){
return(
<div>22</div>
)
}
}
getSnapshotBeforeUpdate()
getSnapshotBeforeUpdate(prevProps,prevSteate)
Вызывается перед фактическим обновлением DOM. Может получить некоторую полезную информацию и передать ее в качестве параметра вcomponentDidUpdate()
.prevProps
Undedprops
,prevState
значит до обновленияstate
.
существуетrender()
ПозжеcomponentDidUpdate()
звонил раньше. Возвращаемое значение (моментальный снимок) этого метода можно использовать какcomponentDidUpdate()
Используется третий параметр. Возврат напрямую, если возвращаемое значение не требуетсяnull
.
getSnapshotBeforeUpdate()
нужно иcomponentDidUpdate()
соответствовать.
componentDidUpdate()
componentDidUpdate(prevProps, prevState, snapshot)
Этот метод вызывается сразу после завершения обновления. Этот метод не выполняется при первом рендеринге.
Когда компонент обновляется, здесь можно управлять DOM.
можно использовать на этом этапеsetState
,вызыватьrender()
Но он должен быть заключен в условный оператор, чтобы избежать бесконечного цикла.
удалить
- componentWillUnmount()
componentWillUnmount()
Будет вызываться непосредственно перед размонтированием и уничтожением компонента. Этот метод в основном используется для выполнения некоторых работ по очистке, таких как: таймеры, очистка привязок событий и отмена сетевых запросов.
не может быть вызван на данном этапеsetState
, потому что компонент никогда не перерисовывается.
Суммировать
Жизненный цикл React можно посмотретькарта жизненного цикла.
Хотя React - это обратно совместимо, рекомендуется постепенно использовать новые методы жизненного цикла.
Для получения более подробной информации перейдите наЖизненный цикл реакции