альтернатива правилу линтера response /no-did-update-set-state
Мое приложение использует React 15
и мы избегаем использования componentWillReceiveProps
в компонентах (чтобы было меньше работы во время перехода на React 16+). Имея это в виду, подходящим местом для установки состояния на основе предыдущих свойств являетсяcomponentDidUpdate
. Но с правилом линтераreact/no-did-update-set-state
мы получаем ошибку ниже:
error Do not use setState in componentDidUpdate react/no-did-update-set-state
Из объяснения, данного https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md, правило имеет смысл.
Что такое альтернатива (без правила отключения)... означает, где мы должны установить состояние, чтобы соблюдать это правило?
1 ответ
Вы можете попробовать getDerivedStateFromProps.
static getDerivedStateFromProps(props, state) {
if (props.value) {
return { ...state, value: props.value };
}
return state;
}
В этом случае, если вы получите новое значение от props, оно будет применено к вашему состоянию.
Но в react есть этот хук только в версии 16.
В v15 это нужно делать с помощью componentWillReceiveProps или componentDidUpdate + setState. Других способов нет.