这是我主要为自己写的一份文件,提醒我为什么我有一些非传统的设置来管理" 选定的项目 "状态.
在大多数应用中,URL 是 事物ID 的真实状态.
如果您在 /projects/123上
,则 project ID为123
,并且 URL是真实状态. Redux将保存 对象的 map,但您必须选择一个id: 123
从该 map,基于URL.
通常你想要的是避免在 redux存储中 复制该状态. Redux 最适合作为单一事实来源,尝试链接 Redux和URL状态 可能很脆弱.
然而,这正是我所做的. 🤔
这是一款桌面应用. 当它加载时,我想将用户重定向到他们上次打开它时的项目页面.
我有将所选项目ID 存储在 redux 中,以便我可以将其保存在 localStorage中,并在下次打开应用程序时 重新补充.
此外,有时我可能
会想要从 不同的页面 访问所选的项目ID.我希望能够灵活地做到这一点 - 无论 是否/何时 这个 可能 的发生.
基于 特定路由 的项目仍然有相关的值. 没有它,我必须创建自己的 路由解决方案,以便在项目之间导航,我希望能够 从应用程序的任何位置 链接到 特定项目页面,而无需担心调度 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 变化