Я уже некоторое время программирую с React, но никогда не сталкивался с этой досадной проблемой: в одном из моих компонентов componentWillReceiveProps
срабатывает до запуска setState()
в componentDidMount
. Это вызывает несколько проблем в моем приложении.
У меня есть переменная this.props.flag
, полученная от реквизита, которая будет сохранена в состоянии компонента:
componentDidMount() {
if (!_.isEmpty(this.props.flag)) {
console.log('Flag Did:', this.props.flag);
this.setState({
flag: this.props.flag
},
() => doSomething()
);
}
В моем методе componentWillReceiveProps
переменная this.state.flag
будет заменена, просто если она пуста или если она отличается от значения this.props.flag
(проверки выполняются с использованием библиотеки lodash):
componentWillReceiveProps(nextProps) {
const { flag } = this.state;
console.log('Flag Will:', !_.isEqual(flag, nextProps.flag), flag, nextProps.flag);
if (!_.isEmpty(nextProps.flag) && !_.isEqual(flag, nextProps.flag)) {
this.setState({
flag: nextProps.flag,
},
() => doSomething()
);
}
}
Предположим, что пропеллер flag
в этом случае всегда имеет одно и то же значение и что this.state.flag
инициализируется undefined
. Когда я проверяю журнал консоли, я вижу следующий результат:
Flag Did: true
Flag Will: true undefined true
Поэтому, когда код вводит componentWillReceiveProps
, значение this.state.flag
все еще равно undefined
, это означает, что еще не было установлено setState
в componentDidMount
.
Это не соответствует жизненному циклу React или я что-то упустил? Как я могу избежать такого поведения?