如何在 Redux Store 中存储一个实体?

How to store one entity in Redux Store?

我正在为我的 Redux 商店使用 Normalizing State Shape,它看起来像这样:

  entities: {
    users: {
      list: [], // <-- list of all my users
      loading: false,
      lastFetch: null,
    },
  }

如果有人直接在用户的详细信息页面上打开网站,我该怎么办?例如:{WEBSITE_URL}/users/1。 Redux Store 是空的,我只需要请求一个实体。我应该:

  1. 获取整个列表,将其放入商店并select一个请求的实体?

  2. 仅获取用户 #1,将其放入商店用户列表 (entities.users.list),将 lastFetch 设置为空 (这是因为如果有人将重定向到下一个列表,他将再次获取新列表。很明显,之前的列表没有所有用户),并显示列表中的用户 #1。

  3. 仅获取用户 #1,将其放在商店中的单独位置。例如在 usersselected 字段中:

     entities: {
       users: {
         list: [], 
         loading: false,
         lastFetch: null,
         selected: null // <--- HERE
       },
     }
    

您认为最好的解决方案是什么?我需要 selected 字段吗?所有教程和课程都没有提到这个场景,只提到如何获取列表的场景。

我也遇到了同样的问题

我的方法始终是 — 3. 我正在创建 selected/single 状态来加载数据和一个额外的 action(例如 clearSelectedUser、clearSelectedPost)来在组件卸载时从存储中清除数据。

我也在使用 Redux Saga 来获取数据(执行异步操作),这作为组合使用效果很好。我真的很喜欢拥有没有异步调用的简洁组件的想法。

但是,我也发现 可以接受 使用组件状态(使用 useState 钩子)并直接从组件获取数据(没有 Redux Saga 或商店) 在这种特殊情况下(实体单一 page/screen)。

选项 1. 如果您从 API 获取分页数据,则该选项将不起作用。你只会让事情复杂化。

选项 2. 我同意你的观点。