Состояние родительского селектора NgRx c параметры - PullRequest
0 голосов
/ 05 августа 2020

Допустим, у меня есть селектор, который получает реквизиты:

export const selectTaskById = createSelector(
  selectCoreState,
  (state, props: { id: TaskKey }) => state?.tasks[props.id] || null
);

Затем у меня есть другой селектор, который не получает реквизиты, но он должен использовать мир данных из указанного выше селектора, предоставив его жестко запрограммированный идентификатор:

export const selectGeneralTask = createSelector(
  selectTaskById, // -- Here I want to pass hardcoded props with {id: 'generalTask'}
  (state) => state
);

Я искал через SO и inte rnet и не нашел решения, как я могу этого достичь.

В нижней строке я хотел бы найти Кстати, как я могу сделать своего рода «абстракцию» на селекторах, не имея необходимости знать «id» в каждом месте, где мне нужна информация для конкретной c задачи.

UPDATE На данный момент единственное решение, которое я нашел, выглядит следующим образом: Я добавил еще один селектор:

export const selectRootState = (state: AppState) => state;

Затем использовал его в selectGeneralTask:

export const selectGeneralTask = createSelector(
  selectRootState,
  (state) => selectTaskById(state, {id: 'generalTask'})
);

Если у кого-то есть альтернативный способ решения, я был бы очень рад услышать его.

1 Ответ

1 голос
/ 06 августа 2020

Вы можете создать фабричный селектор:

export const selectTaskById = (id) => createSelector(
  selectCoreState,
  (state) => state?.tasks[id] || null
);

export const selectGeneralTask = createSelector(
  selectTaskById('generalTask'),
  (state) => state
);
...