首页 > 解决方案 > 在本地数据库中镜像部分 redux 状态

问题描述

我正在开发一个使用 redux 和 redux-thunk 管理状态的简单应用程序。该应用程序支持一些关于不同类(例如项目)的基本 CRUD 操作。这些 CRUD 操作的结果应该会改变部分 redux 状态(以便在 UI 中显示新信息),但也会在应用重新启动时保持不变。

满足这些要求的最佳模式是什么?

A -创建两个 redux 操作,一个仅用于更新应用程序的本地状态(例如AddItem),第二个使用 thunk(例如CreateItem)负责更新应用程序的状态以加载、异步访问数据库、调度AddItem和再次切换加载状态

B -对于每个 CRUD 操作,只要应用程序的生命周期结束,就只更新本地状态并将其镜像到数据库。

我知道选项 B 会暗示很多可能的问题,但选项 A 对我来说看起来不是很好,只要它暗示在概念上重复一些操作。哪个选项更好?还有其他我不考虑的方法吗?

提前谢谢

标签: databasereduxarchitectureredux-thunk

解决方案


我喜欢做的是使用 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 。

希望这可以帮助。


推荐阅读