Обновить внутреннее состояние на основе props (антипаттерн)

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

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

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

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

Я не вижу другого пути, кроме как полагаться на значение в магазине ... Как еще вы можете получить доступ к значению, установленному действием?

Yossi 24.06.2018 14:52

@Rahamin, ты прав, я просто создал редуктор для своего модального окна с методами открытия / закрытия для отправки при необходимости. Мне это решение нравится больше, чем реализация обратного вызова.

SpellChucker 26.06.2018 14:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
71
1

Ответы 1

Вам следует использовать новый статический метод 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.

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