目前,我在适配器文件中定义了所有适配器,并从那里导出它们。在我的切片中,我导出一个selectors对象,其中包含由entityAdapter生成的选择器。由于我的entityState嵌套在片状态中,所以我定义了如下所示的选择器:
const entitySelectors = myAdapter.getSelectors<RootState>((state) => state.sliceState.entities)
我希望在它们导出的同一片的还原器中使用这些选择器(它们可以访问片状态),这样我就不会编写适配器已经为我准备的逻辑。是否有一种优雅的方法可以做到这一点,而不必定义相同选择器的两个版本(一个用于RootState,另一个用于SliceState)?
我可以这么做:
const sliceStateSelectors = myAdapter.getSelectors<SliceState>((state) => state.entities);
const rootStateSelectors = myAdapter.getSelectors<RootState>((state) => state.sliceState.entities);
export const selectors = {
...rootStateSelectors,
// other selectors
}并在还原器中使用sliceState选择器,但从清晰/重复的角度来看,这似乎不可取。
发布于 2022-03-19 16:14:27
Redux选择器通常会将整个Redux根状态对象作为参数,但切片只是该状态的一部分。因此,是的,如果要在还原器内部使用选择器,则需要创建只接受片状态的备用版本。
这就是说:老实说,我建议不要试图在片的减速器中使用选择器。这里并没有什么好处。很容易完成state.entities[someId]而不是selectById()等操作,而且片的还原器逻辑控制着这些项的存储方式。
https://stackoverflow.com/questions/71531558
复制相似问题