希望Redux驱动的路由和路由/ URL作为二等公民是错误的吗?

时间:2017-12-01 11:42:07

标签: reactjs react-router react-redux

我已阅读官方Redux documentation regarding React Router并调查react-router-reduxredux-routerredux-little-router。我也同意rational for redux-little-router:React Router对React应用程序有很强的架构结果,并且它们与Redux发生冲突。

我对路由的感觉是它在React + Redux生态系统中过于重要,而它应该被视为二等公民。在设计单页应用时,我们通常根本不需要网址。我们仍然支持他们保留Web体验(SEO,书签......),但我们当然不希望他们推动应用程序结构。

我在想什么:

  • 外部导航:路由到状态映射,具有经典的简化操作机制。换句话说,导航会触发由自定义reducer调度和处理的操作(仅提供路由映射和解析的帮助)。一旦状态更新,这就像往常一样React。特别是,路由和React组件之间没有映射,不像React Router的Route那样,有点像redux-little-router
  • 在app导航中:当前URL是从状态派生的,有点像视图。 Redux中间件可以识别的一种renderURL函数。如果状态更新没有在URL中生成任何更改,那么没有任何反应。但是,如果URL现在不同,则中间件通过将其推送到历史记录来反映更改。

使用这种方法,不再有Link个组件。只有常规的Redux操作和中间件来处理导航作为副作用。实际上,这个解决方案用于导航React为DOM做的事情:一个(超级直接的)URL协调,将状态作为单一事实来源。

为了说明这一点,请考虑Redux Todo list example

  • 访问/SHOW_ALL时,将调度包含该URL的操作。常规的导航专用reducer在状态中设置visibilityFilterVisibilityFilters.SHOW_ALL,可能还有一些路由映射/解析帮助器。作为替代方案,导航操作可以转换为SET_VISIBILITY_FILTER操作,然后像往常一样调度和减少。
  • 在创建商店时注册了一个花哨的renderURL函数作为中间件的一部分。它返回"/" + state.visibilityFilter。同样,一些路线管理助手会受到现实生活中的欢迎。

现在original Todo app没有变化。我们只添加一些新代码来支持新功能。

问题是:我找不到任何支持这一愿景的东西。没有文章,没有react-redux-something包。作为React的初学者,要么我是天才,要么就是我无法得到的东西。由于后者最有可能(令我极为沮丧),我将不胜感激:

  • 关于" Redux驱动的React路由"的反馈,或者应该命名的任何内容。它有什么缺陷?
  • 关于如何考虑Redux和路由的提示,如相关文章。

0 个答案:

没有答案