使用 createEntityAdapter 时,每个 React 组件都应该有自己的切片吗?
Should every React component have it's own slice, when using createEntityAdapter?
我正在使用 Redux-tookit 的 createSlice
和 createEntityAdapter
标准化数据。
这是一个典型的博客应用程序,具有(posts、评论、用户)- 实体
通常,在使用 createEntityAdapter
之前,我会:
- 在
postsSlice
中获取、规范化和存储数据
所以我的 postSlice state
看起来像这样:
blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}
- 从
postsSlice
的状态获取 id
到 Posts
的组件
- 将 comment/user
id
从 Posts
向下传递到 children - Comment
User
组件,在那里他们将使用通过 id
的选择器连接到 parent 的 postSlice
状态
const postsAdapter = createEntityAdapter();
const postsSlice = createSlice({
name: "posts",
initialState: postsAdapter.getInitialState(),
reducers: {
setPosts: (state, { payload }) =>
postsAdapter.setAll(state, payload.entities.posts),
},
});
问题是:
- 使用时
createEntityAdapter
由于我们使用 createEntityAdapter.getInitialState()
,我们在每个切片中得到相同的 initialState {entities: {} ids: []}
模式。
- 这不允许像我以前那样拥有 initialState:
blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}
是否每个组件(Posts
、User
、Comment
)都有自己的 slice/reducer 并获取自己的部分来自同一端点的数据量?
因此: (根据 createEntityAdapter.getInitialState() 模式)
postSlice
状态将只包含 post 实体 - entities: {posts: {}, ids:[]}
commentSlice
状态-评论实体-entities: {comments: {}, ids:[]}
- 等...
没有。 组件和 Redux 状态结构之间从来没有 1:1 关联。相反,您应该 organize your state in terms of your data types and update logic,并且组件应该根据需要根据自己的需要访问和重塑该数据。
注意有multiple ways to approach structuring that data in the store even if it's being normalized。例如,您可以将每种数据类型作为其自己的顶级切片,或者拥有一个共享的 entities
reducer,其中每种类型都嵌套在其中。
我正在使用 Redux-tookit 的 createSlice
和 createEntityAdapter
标准化数据。
这是一个典型的博客应用程序,具有(posts、评论、用户)- 实体
通常,在使用 createEntityAdapter
之前,我会:
- 在
postsSlice
中获取、规范化和存储数据 所以我的 postSlicestate
看起来像这样:
blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}
- 从
postsSlice
的状态获取id
到Posts
的组件 - 将 comment/user
id
从Posts
向下传递到 children -Comment
User
组件,在那里他们将使用通过id
的选择器连接到 parent 的postSlice
状态
const postsAdapter = createEntityAdapter();
const postsSlice = createSlice({
name: "posts",
initialState: postsAdapter.getInitialState(),
reducers: {
setPosts: (state, { payload }) =>
postsAdapter.setAll(state, payload.entities.posts),
},
});
问题是:
- 使用时
createEntityAdapter
由于我们使用createEntityAdapter.getInitialState()
,我们在每个切片中得到相同的 initialState{entities: {} ids: []}
模式。 - 这不允许像我以前那样拥有 initialState:
blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}
是否每个组件(Posts
、User
、Comment
)都有自己的 slice/reducer 并获取自己的部分来自同一端点的数据量?
因此: (根据 createEntityAdapter.getInitialState() 模式)
postSlice
状态将只包含 post 实体 -entities: {posts: {}, ids:[]}
commentSlice
状态-评论实体-entities: {comments: {}, ids:[]}
- 等...
没有。 组件和 Redux 状态结构之间从来没有 1:1 关联。相反,您应该 organize your state in terms of your data types and update logic,并且组件应该根据需要根据自己的需要访问和重塑该数据。
注意有multiple ways to approach structuring that data in the store even if it's being normalized。例如,您可以将每种数据类型作为其自己的顶级切片,或者拥有一个共享的 entities
reducer,其中每种类型都嵌套在其中。