Skip to content

Latest commit

 

History

History
32 lines (16 loc) · 1.97 KB

url-state-duplication.md

File metadata and controls

32 lines (16 loc) · 1.97 KB

这是我主要为自己写的一份文件,提醒我为什么我有一些非传统的设置来管理" 选定的项目 "状态.

在大多数应用中,URL 是 事物ID 的真实状态.

如果您在 /projects/123上,则 project ID为123,并且 URL是真实状态. Redux将保存 对象的 map,但您必须选择一个id: 123从该 map,基于URL.

通常你想要的是避免在 redux存储中 复制该状态. Redux 最适合作为单一事实来源,尝试链接 Redux和URL状态 可能很脆弱.

然而,这正是我所做的. 🤔

为什么我不能只使用URL状态

这是一款桌面应用. 当它加载时,我想将用户重定向到他们上次打开它时的项目页面.

将所选项目ID 存储在 redux 中,以便我可以将其保存在 localStorage中,并在下次打开应用程序时 重新补充.

此外,有时我可能会想要从 不同的页面 访问所选的项目ID.我希望能够灵活地做到这一点 - 无论 是否/何时 这个 可能 的发生.

为什么我不能只使用 Redux状态

基于 特定路由 的项目仍然有相关的值. 没有它,我必须创建自己的 路由解决方案,以便在项目之间导航,我希望能够 从应用程序的任何位置 链接到 特定项目页面,而无需担心调度 redux操作. 这个项目使用 React Router,没有合适的项目页面URL 是很奇怪的.

我做了什么来减轻 复制这个真实来源的 危险

App,我监听history对象. 每当页面中的任何 路径发生变化 时,我都会检查它是否是 项目页面 的导航,并 dispatch-触发 使用 URL中的项目ID 的 action-行为 更新 Redux存储.

在应用程序内部工作方面,我们应该将 Redux 视为真实的来源.

实际上,URL是action设定状态. 埃里克·文斯蒂 (Eric Vinceti) 有一个谈话,他谈到 URL是如何 action,而不是 状态-state. 这个模型似乎在这里工作得很好.

url 变化 => no/yes => dispatch("action",url-id) => reduex store 变化