Согласно Facebook, следующие методы жизненного цикла будут устаревшими в React v17.

* componentWillMount
* componentWillReceiveProps
* componentWillUpdate

Я бы порекомендовал прекратить использовать все вышеупомянутые функции жизненного цикла, если вы уже используете react v1.6.3 и выше, и воспользоваться преимуществами новых функций жизненного цикла для плавного перехода на react v17.

Иногда мы использовали componentWillReceiveProps для отслеживания изменений свойств и установки состояния в этой функции жизненного цикла.

Нам нужно разделить componentWillReceiveProps на 2 новых метода жизненного цикла.

static getDerivedStateFromProps(nextProps, prevState) {
  // return your new state object here
  return { ...nextProps, someValue: 'newValue' }
}

а также

componentDidUpdate(prevProps, prevState, snapshot) {
  const { val } = prevProps;
  if(this.state.someValue === null) {
    requestValueFromServer().then(result=>{
        this.setState( someValue: result)
      });
    }
}

Если вам нужно сохранить состояние на основе props, вам понадобится getDerivedStateFromProps.

Если вам нужно получить данные с сервера, чтобы получить какие-либо побочные эффекты на основе свойств, поместите эти методы в componentDidUpdate.

И вот еще…

Всегда инициализируйте значение своего состояния в конструкторе.

Если вы используете eslint, это правило eslint« response / no-did-update-set-state становится полезным при использовании response v› 16.3 »

Добавьте эту строку в раздел правил вашего eslint.rc.

"react/no-did-update-set-state": 0