我正在使用Redux的createSlice和createEntityAdapter与规范化数据。
这是一个典型的博客应用程序(帖子、评论、用户)-实体
通常,在使用createEntityAdapter之前,我会:
postsSlice中获取、规范化和存储数据
所以我的postSlice state看起来是这样的:
blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}id从postsSlice的状态到Posts组件id从Posts传递到子Comment User组件,在那里他们将使用传递的id获得数据,选择器连接到父级的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: []}模式。blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}每个组件(Posts, User__, Comment__)都应该有自己的切片/还原器,并从同一个端点获取自己的数据吗?
以便:(根据createEntityAdapter.getInitialState()模式)
postSlice状态只包含post实体- entities: {posts: {}, ids:[]}commentSlice状态-注释实体- entities: {comments: {}, ids:[]}发布于 2021-02-23 15:54:29
不是的。组件和Redux状态结构之间从来没有1:1的关联。相反,您应该使用根据数据类型和更新逻辑组织状态,并且组件应该根据自己的需要访问和重新构造这些数据。
请注意,存在使用多种方法来构造存储中的数据,即使数据正在规范化。例如,您可以将每个数据类型作为自己的顶级切片,或者有一个共享的entities还原器,其中每个类型都嵌套在其中。
https://stackoverflow.com/questions/66335827
复制相似问题