#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(
)