database - 在本地数据库中镜像部分 redux 状态
问题描述
我正在开发一个使用 redux 和 redux-thunk 管理状态的简单应用程序。该应用程序支持一些关于不同类(例如项目)的基本 CRUD 操作。这些 CRUD 操作的结果应该会改变部分 redux 状态(以便在 UI 中显示新信息),但也会在应用重新启动时保持不变。
满足这些要求的最佳模式是什么?
A -创建两个 redux 操作,一个仅用于更新应用程序的本地状态(例如AddItem
),第二个使用 thunk(例如CreateItem
)负责更新应用程序的状态以加载、异步访问数据库、调度AddItem
和再次切换加载状态
B -对于每个 CRUD 操作,只要应用程序的生命周期结束,就只更新本地状态并将其镜像到数据库。
我知道选项 B 会暗示很多可能的问题,但选项 A 对我来说看起来不是很好,只要它暗示在概念上重复一些操作。哪个选项更好?还有其他我不考虑的方法吗?
提前谢谢
解决方案
我喜欢做的是使用 3 个动作:ACTION_NAME{REQUEST/RESPONSE/ERROR}(很好的例子:https ://redux.js.org/advanced/async-actions )。所以你的基本流程是:
执行 thunk -> 请求已分派(将本地状态更改为正在加载)-> 调用 BE API -> api 完成 -> 根据成功或错误刷新本地存储。您可以编写一个自定义操作创建器或中间件,当您调用 BE API 时将自动调度 REQUEST/RESPONSE/ERROR 操作(这是一个很好的示例:https ://blog.logrocket.com/data-fetching-in-redux-应用程序-a-100-正确的方法-4d26e21750fc/)。
B 解决方案的最大问题是如果您有超过 1 个用户。由于更改仅保存在应用端,因此在用户 B 注销之前,用户 A 不会看到用户 B 的任何更改。如果这不是问题,那么为了保存状态,我推荐如下内容:https ://github.com/rt2zz/redux-persist 。
希望这可以帮助。
推荐阅读
- html - 通过双击由 angular 11 编写的行来检索我的 ag-grid 的行数据的问题
- cuda - 整数内在函数未定义
- python - 如何创建两个共享 x 轴的子图,其中只有一个轴的纵横比为 1:1?
- javascript - 在 JavaScript 中使 for 循环异步
- java - 如何设置身体以获得凌空请求?
- python - 如何避免 Python 3.7 中 f(x) = (1-cos(x))/x**2 中的小数的灾难性取消?
- java - 如何测试 Spring MVC 以及存储库 MongoDb
- r - R中的每周日期
- reactjs - Axios 用于 Reactjs 和 Nextjs 中的多个请求
- javascript - REACT NATIVE:如何将示例代码更改为带有钩子的功能组件?