альтернатива правилу линтера 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. Других способов нет.

Другие вопросы по тегам