Por el momento, estoy definiendo todos mis adaptadores en un archivo de adaptadores y exportándolos desde allí. Dentro de mi segmento, exporto un objeto de selectors dentro del cual incluyo los selectores generados por mi entityAdapter de entidad. Dado que mi entidadEstado está anidado dentro del estado de corte, he definido los selectores así:
const entitySelectors = myAdapter.getSelectors<RootState>((state) => state.sliceState.entities)
Quiero usar estos selectores en los reductores (que tienen acceso al estado del segmento) del mismo segmento desde el que se exportan para no escribir la lógica que el adaptador ya tiene para mí. ¿Hay alguna manera elegante de hacer esto sin tener que definir dos versiones de los mismos selectores (una para RootState y otra para SliceState)?
Podría tener:
const sliceStateSelectors = myAdapter.getSelectors<SliceState>((state) => state.entities); const rootStateSelectors = myAdapter.getSelectors<RootState>((state) => state.sliceState.entities); export const selectors = { ...rootStateSelectors, // other selectors }y uso selectores de sliceState en mis reductores, pero no parece deseable desde el punto de vista de claridad/repetición.
Un selector de Redux normalmente espera que el objeto de estado raíz de Redux completo sea un argumento, pero una porción es solo una parte de ese estado. Entonces, sí, si desea usar selectores dentro de reductores, deberá crear versiones alternativas que puedan aceptar solo el estado de división.
Dicho esto: honestamente recomendaría no intentar usar selectores dentro de los reductores de una rebanada. No hay realmente ningún beneficio aquí. Es bastante fácil hacer state.entities[someId] en lugar de selectById() , etc., y la lógica reductora del segmento controla cómo se almacenan esos elementos de todos modos.