Обновление внутреннего состояния на основе реквизита (анти-паттерн) - PullRequest
0 голосов
/ 24 июня 2018

Я новичок в реакции и редукции, но я немного поработал с Angular / Vue.

У меня есть компонент, который имеет внутреннее состояние для отслеживания установки класса is-active на модал. На этом модале есть форма, которая будет делать AJAX-запрос с использованием промежуточного программного обеспечения redux-thunk. Мне нужно знать, когда / если этот AJAX-запрос будет выполнен успешно, и если это так, закройте модальный (удалите класс is-active).

Я рассматривал вопрос о том, чтобы сделать компонент полностью контролируемым компонентом, но это означало бы поместить его в хранилище избыточностей, чтобы установить состояние для успешных запросов AJAX.

Я также вижу, что componentWillReceiveProps устарела и, по-видимому, анти-паттерн, и я действительно не хочу использовать анти-паттерны в своем приложении. Есть ли другой способ сделать этот сценарий? Любая помощь приветствуется !!

1 Ответ

0 голосов
/ 24 июня 2018

Вы должны использовать новый статический метод getDerivedStateFromProps, вы можете сделать что-то вроде этого (убедитесь, что вы используете react: ^16.3.0):

state = { is_active: false, _is_active: false }

static getDerivedStateFromProps(nextProps, current_state) {
  // you can should set isOpen via a props
  // so based on your ajax call you can set this to false
  let { isOpen } = nextProps;
  if (isOpen !== current_state._is_active) {
    return {
      _is_active: isOpen,
      is_active: isOpen
    }
  }
  return { _is_active: false }
}

Затем вы можете настроить свой модал на внутреннее закрытие черезthis.state.is_active или показать и закрыть снаружи через isOpen опору

...