使用 createEntityAdapter 时,每个 React 组件都应该有自己的切片吗?

Should every React component have it's own slice, when using createEntityAdapter?

我正在使用 Redux-tookit 的 createSlicecreateEntityAdapter 标准化数据。

这是一个典型的博客应用程序,具有(posts、评论、用户)- 实体

通常,在使用 createEntityAdapter 之前,我会:

  1. postsSlice
    中获取、规范化和存储数据 所以我的 postSlice state 看起来像这样:
    blogPosts: {entities: {posts: {}, users:{}, comments: {}}, ids:[]}
  2. postsSlice 的状态获取 idPosts 的组件
  3. 将 comment/user idPosts 向下传递到 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),
  },
});

问题是:

是否每个组件(PostsUserComment)都有自己的 slice/reducer 并获取自己的部分来自同一端点的数据量?

因此: (根据 createEntityAdapter.getInitialState() 模式)

没有。 组件和 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,其中每种类型都嵌套在其中。