Функция выбора для пользовательского хранилища rxjs

#angular #typescript #rxjs

#angular #typescript #rxjs

Вопрос:

У меня есть эта функция выбора, которая помогает мне выбрать фрагмент моего пользовательского хранилища, но только фрагмент или все хранилище.

   select<K>(mapFn: (state: T) => K): Observable<K> {
    return this.internalState$.asObservable().pipe(
      map((state: T) => mapFn(state)),
      distinctUntilChanged()
    );
  }
 

И я использую это так

 this.title$ = this.store.select((s) => s.title)
 

Работает нормально, но я попал в ситуацию, когда мне нужны две части моего состояния. Я решил это так
this.store.select((s) => s).pipe(map((m) => ({ date: m.date, zone: m.zone }))) или выбор всего хранилища и в следующем канале, используя нужные мне свойства или используя combineLatest с выбранными состояниями.

Есть ли способ создать селектор, который будет выбирать свойства хранилища? Я использовал Pick<T> раньше, но я не знаю, как применить ее здесь.

Комментарии:

1. .select((s) => s) ничего не делает. Вы можете просто сделать: this.store.select(s => ({ date: m.date, zone: m.zone }))

2. Так просто, но я этого не видел. Не могли бы вы добавить его в качестве ответа, чтобы я мог пометить его решаемым?

3. Конечно, готово. Рад, что это помогло вам 🙂

Ответ №1:

.select((s) => s) сама по себе ничего не делает.

Вместо этого вы должны сделать:

 this.store.select(s => ({ date: s.date, zone: s.zone })).pipe(

)