Redux Observable Epic условный оператор с использованием RXJS - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь достичь определенного сценария, написав эпос в наблюдаемом редуксе.

Элементы в представлении

Раскрывающийся список: В раскрывающемся списке есть страны, Текстbox: имеет поле имени пользователя A Флажок: выбор пользователя персоной (аналогично admin против стандарта)

Redux State сохраняет следующее

Страна Dropdown value Text Boxзначение и состояние (отключено или включено) Состояние флажка

Предположение

Если текстовое поле отключено, это означает, что текстовое поле уже имеет какое-либо значение.

Мне нужно вызывать API (принимает страну и имя пользователя в качестве входных данных) всякий раз, когда пользователь изменяет значение в раскрывающемся списке, или если он снимает флажок (когда значение равно false) или еслитекстовое поле отключено.

export default (action$: Observable<any>, state$: State$) => {
  const countryValue$ =
    state$.pipe(
      map(o => o.countryCode),
      distinctUntilChanged(),
      filter(Boolean),
    );

  const email$ =
    state$.pipe(
      filter(o => o.isTextBoxLocked),
      filter(o => o.isAdmin === false),
      map(o => email),
      distinctUntilChanged(),
    );

  return combineLatest(countryValue$, email$)
    .pipe(map(([country, email]) =>
      actions.fetchData(country, email)));
};

Проблема в том, что, если значение флажка равно true, все еще инициируется вызов API (поскольку он выбирает последнее значение, отправленное потоком электронной почты).Как это исправить?Это происходит из-за моего использования combLatest.

1 Ответ

0 голосов
/ 02 мая 2019

Существует четыре способа подписки на несколько потоков в rxjs.

CombineLatest, Zip, WithLatestFrom, ForkJoin

Все служат своей цели. Больше подробностей, https://scotch.io/tutorials/rxjs-operators-for-dummies-forkjoin-zip-combinelatest-withlatestfrom

Ваша проблема, кажется, другая и не зависит от оператора, запрос на изменения в флажке вызывается, хотя у вас нет подписчика, написанного на него. Но это часть государства. Возможно, вам придется проверить условие фильтра, и ключ diverUntilChanged () выполнил свою задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...