如何在 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 是空的,我只需要请求一个实体。我应该:
获取整个列表,将其放入商店并select一个请求的实体?
仅获取用户 #1,将其放入商店用户列表 (entities.users.list
),将 lastFetch
设置为空 (这是因为如果有人将重定向到下一个列表,他将再次获取新列表。很明显,之前的列表没有所有用户),并显示列表中的用户 #1。
仅获取用户 #1,将其放在商店中的单独位置。例如在 users
的 selected
字段中:
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. 我同意你的观点。
我正在为我的 Redux 商店使用 Normalizing State Shape
,它看起来像这样:
entities: {
users: {
list: [], // <-- list of all my users
loading: false,
lastFetch: null,
},
}
如果有人直接在用户的详细信息页面上打开网站,我该怎么办?例如:{WEBSITE_URL}/users/1
。 Redux Store 是空的,我只需要请求一个实体。我应该:
获取整个列表,将其放入商店并select一个请求的实体?
仅获取用户 #1,将其放入商店用户列表 (
entities.users.list
),将lastFetch
设置为空 (这是因为如果有人将重定向到下一个列表,他将再次获取新列表。很明显,之前的列表没有所有用户),并显示列表中的用户 #1。仅获取用户 #1,将其放在商店中的单独位置。例如在
users
的selected
字段中: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. 我同意你的观点。