Я использую React 16 и мне нужно вызвать условный setState внутри componentDidUpdate . setState выполняется асинхронно. Поэтому обычно, если мне нужно использовать состояние для вычисления моего следующего состояния , я должен использовать функцию updater в качестве аргумента для setState .
В React 16 добавлена возможность отменить обновление setState , вернув null из setState . Итак, я должен использовать функцию Updater , чтобы сделать условный setState ?
Код с обновлением :
componentDidUpdate(prevProps, prevState) {
const prevValue = prevProps.value;
this.setState((state, props) => {
const nextValue = props.value;
if (prevValue === nextValue) return null;
const isIncreasing = prevValue < nextValue;
if (prevState.isIncreasing === isIncreasing) return null;
return { isIncreasing };
});
}
Код без средства обновления :
componentDidUpdate(prevProps, prevState) {
const prevValue = prevProps.value;
const nextValue = this.props.value;
if (prevValue === nextValue) return;
const isIncreasing = prevValue < nextValue;
if (prevState.isIncreasing === isIncreasing) return;
this.setState({ isIncreasing });
}