我的应用程序正在使用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给出的解释,规则很有意义。
什么是替代方案(没有禁用规则)...意味着我们应该在哪里设置要遵守此规则的状态?
答案 0 :(得分:0)
您可以尝试getDerivedStateFromProps。
static getDerivedStateFromProps(props, state) {
if (props.value) {
return { ...state, value: props.value };
}
return state;
}
在这种情况下,如果您将从道具中获得新的价值,则会将其应用于您的州。
但是react仅在版本16中具有此钩子。
在v15中,您必须使用componentWillReceiveProps或componentDidUpdate + setState来完成。没有其他方法。