ngrx лучший способ использовать несколько страниц в одном хранилище, но разные представления данных - PullRequest
0 голосов
/ 22 апреля 2020

Это приложение Angular 8, использующее ngrx / store. У нас есть несколько магазинов и страниц. Вот пример проблемы, с которой мы сталкиваемся. У нас есть хранилище «Car» с таким состоянием, как:

export interface State extends QueryEntityState<Car> {
  isLoading?: boolean;
  error?: any;
  page?: number;
  pageCount?: number;
  allLoaded?: boolean;
  activeIds?: number;
  favoritesOnly?: boolean;
}

Затем у нас есть несколько страниц, которым необходимо просмотреть это хранилище данных, и с каждой из них связаны разные параметры запроса. Например, у вас может быть страница, которая показывает все модели автомобилей Ford. У нас также есть служба фильтрации, которая позволяет пользователям подавать заявки на основе выбора на страницах, но это выходит за рамки этого ... на данной странице мы можем захотеть объединить данные из хранилища Cars в хранилище производителей, где фильтруются Произведения. Примером этого может служить страница, которая загружает автомобили от производителей в США.

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

Пример кода:

export const selectCars = () =>
    createSelector(selectCarState, selectCarEntities, selectAllManufacturers , (state, allCars, allManufacturers) => {
        let cars = state.activeIds.map(id => allCars[id]);
            cars= cars.filter(c => allManufacturers.find(m => c.Id === m.CarId));
        return groupCarsWithManufacturers({}, cars, allmanufacturers);
    });
...