У меня есть следующий магазин
export const featureAdapter: EntityAdapter<IProduct> = createEntityAdapter<IProduct>({
selectId: model => model.id,
});
export interface State extends EntityState<IProduct> {
selectedProduct?: IProduct;
isLoading?: boolean;
error?: any;
}
export const initialState: State = featureAdapter.getInitialState({
selectedProduct: IProduct,
isLoading: false,
error: null
});
Мне бы хотелось, чтобы мой выбранный продукт всегда указывал на сущность и получал с ней обновления. Я считаю, что поскольку действия всегда создают новый объект, ссылка невозможна, я решил изменить выбранный продукт со ссылки на простой идентификатор.
export const initialState: State = featureAdapter.getInitialState({
selectedProduct: string,
isLoading: false,
error: null
});
но как мне получить мою сущность с тем же идентификатором и получить обновления на моей наблюдаемой, если она изменилась?
Я пытался
export const getSelectedProduct: MemoizedSelector<object, any> = createSelector(
selectAllEntities,
selectedProduct,
(entities, id) => entities[id]
);
export const selectEntityById = createSelector(
selectAllEntities,
(entities, props) => entities[props.id]
);
мои вопросы
Это единственный способ выбрать объект по идентификатору?
this.store$.pipe(
select(ProductStoreSelectors.selectEntityById, { id: product.id }),
map(product => console.log(product))
)
и
this.store $ .select (ProductStoreSelectors.getSelectedProduct) .subscribe ((product: string) => {
console.log (продукт)
}),
это никогда не срабатывает, когда я меняю выбранный товар. Идентификатор
РЕДАКТИРОВАТЬ:
редуктор на выбор сделать следующее
const SET_SELECTED_PRODUCT = (state: State, action: featureAction.SetSelectedProduct) => {
return {
...state,
selectedProduct: action.payload.product.id
};
};