Согласно 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