react / nodid-update-set-state-linter规则替代

时间:2019-11-25 10:36:09

标签: reactjs eslint eslint-plugin-react

我的应用程序正在使用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 个答案:

答案 0 :(得分:0)

您可以尝试getDerivedStateFromProps。

  static getDerivedStateFromProps(props, state) {
    if (props.value) {
      return { ...state, value: props.value };
    }
    return state;
  }

在这种情况下,如果您将从道具中获得新的价值,则会将其应用于您的州。
但是react仅在版本16中具有此钩子。
在v15中,您必须使用componentWillReceiveProps或componentDidUpdate + setState来完成。没有其他方法。