当前位置: 首页 > 知识库问答 >
问题:

使用redux和react路由器进行深度链接的推荐方法

严朝明
2023-03-14

我正在使用React(15.3.0)、Redux(3.5.2)和React路由器(2.6.1)构建一个web应用程序。我包括了我在一些相关文章中看到的版本,但它们引用了这些库的旧版本。

我有一些状态,我想坚持在URL上,以便用户可以深入链接到它。通过深度链接,我的意思是用户可以直接链接到页面的状态。我在我的应用程序中有各种页面,每个页面都有一个单独的减速器,每个页面的状态应该在页面之间保持不变。

我读过丹·阿布拉莫夫推荐的方法:如何同步Redux状态和url哈希标签参数,除了在页面之间保持状态之外,这看起来还可以。

一个示例场景:

>

  • 用户在第一页着陆:/page1

    用户与页面交互,导致状态保存在URL中:/page1?状态={...}

    用户转到第2页:/page2

    用户与第2页交互:/page2?状态={…}

    用户链接到第1页,希望在离开该页时看到该页。问题如何从第1页恢复状态?

    我已经看过react router redux,但我不知道它是否符合我的需要?

    对这个问题有共同的解决方法吗?如果是,是什么?如果没有,你能建议一种方法吗?


  • 共有1个答案

    养俊驰
    2023-03-14

    我相信这个问题的答案不止一个;您只需要选择一个并实现它。

    如果是我,我会这样做:

    1. 使用redux存储作为州的唯一真相来源
    2. 以某种方式(可能是redux中间件)订阅存储,并在page1的相关状态更改时更新url参数
    3. 如果用户访问/page1,请使用存储状态(我假设状态需要同步到服务器才能存储/恢复)
    4. 如果用户访问/page1?状态={…} ,a)将URL状态合并到存储/恢复状态,或b)跳过恢复并直接使用URL

    我甚至会更进一步,不将状态同步到url,因为这似乎是白费力气(除非用户依赖于为页面添加书签)。只需呈现一个名为“共享此URL”的React组件,并让它呈现一个带有适当查询参数的URL。

     类似资料:
    • 在我的React项目中,我有: 没有标题的登录组件 问题:我应该如何构建我的路由器从登录页面开始,当我点击登录时,路由器会把我带到仪表板?

    • 我有一个简单的(目前)应用程序,使用react router和redux,我想为它添加国际化功能。 我已经安装了npm包,并且能够安装和运行提供的示例。我已经将适当的导入添加到我自己的应用程序中,并将国际化标签添加到根渲染方法中。 当我将I18nextProvider标记添加到render方法时,我得到了错误 找不到模块“react” 这并不是特别有用,尤其是因为如果我删除标签,react应用程序

    • 来自导航的代码片段。js 类导航扩展组件{render(){return( ### 使用路由器导出默认值(导航) 我渲染这个组件从App.js 使用路由器导出默认值(应用程序) 下面是我的发票。js 下面是我的index.js 有人能帮我显示发票组件吗。我还没有反应过来。

    • 使用redux和反应路由器,我想访问路由指定的组件以外的组件上的路由参数。 我已经对react-router、redux和react-router-redux进行了如下设置,我想从我的redux存储访问reportId参数。 我已经尝试连接react-redux路由器来存储路由状态,但是我发现除了活动路由的完整路径之外,redux内部没有任何有用的存储。这让我可以选择从redux中的路径解析出re

    • 在我的情况下,当使用从react-redux时,反应路由器不会将我的反应组件视为有效组件。并且有一个警告:失败proType:无效prop提供给 Main.js

    • 我一直在使用react-router-redux,它允许我的位置很好地存储在状态中,并允许我使用react-router来定义路由,并在路由之间进行链接。 一个问题似乎是当我需要使用