【问题标题】:How to store one entity in Redux Store?如何在 Redux Store 中存储一个实体?
【发布时间】:2021-01-09 19:34:14
【问题描述】:

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

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

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

  1. 获取整个列表,将其放入 Store 并选择一个请求的实体?

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

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

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

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

【问题讨论】:

    标签: javascript reactjs redux react-redux redux-toolkit


    【解决方案1】:

    我也面临同样的困境。

    我的方法始终是 - 3. 我正在创建选择/单一状态以加载数据,并创建一个额外的 action(例如 clearSelectedUser、clearSelectedPost)以在组件卸载时从存储中清除数据。

    我还使用 Redux Saga 来获取数据(执行异步操作),这可以作为组合使用。我真的很喜欢在没有异步调用的情况下拥有整洁的组件的想法。

    但是,我也发现 可接受 在这种特殊情况下(实体单页/屏幕)。

    如果您从 API 获取分页数据,

    选项 1. 将不起作用。你只会让事情复杂化。

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

    【讨论】:

    • 所以如果有人打开一个列表页面(您获取您的项目),然后单击特定项目,您是再次获取单个项目还是从列表中选择它?
    • 我一直认为当用户打开单个页面时应该重新获取数据。为什么?因为如果你的应用中没有自动刷新系统,feed(主页/列表页面)会有不是最新的数据,所以每次用户想要获取时获取单个项目是合乎逻辑的有关该特定实例的详细信息。我希望这对你有意义。我也很想听听您对此的看法。
    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多