You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React.js中使用Reach Router实现页面间的数据传递

Reach Router 跳转传参实现方案

以下是3种可直接落地的实现方案:

方案1:使用Link组件内置state属性传参(最常用,适合非敏感、无需持久化的数据)

这是Reach Router原生支持的传参方式,传递的数据不会暴露在URL中:

  • 跳转页写法:
import { Link } from '@reach/router'

// 组件内使用Link时,to属性传入对象格式配置
<Link 
  to={{
    pathname: '/target-page',
    state: {
      userId: 123,
      userName: '张三',
      extraInfo: { type: 'normal' }
    }
  }}
>
  跳转到目标页面
</Link>
  • 目标页取值写法:
import { useLocation } from '@reach/router'

const TargetPage = () => {
  const location = useLocation()
  // 传递的数据存储在location.state中,建议做空值兼容
  const passData = location.state ?? {}
  return <div>用户名:{passData.userName}</div>
}

注意:该方式传递的数据仅在通过Link点击跳转时存在,用户手动刷新页面、或者直接输入目标地址访问时,state会变为undefined,可结合sessionStorage做降级处理。

方案2:URL路径/查询参数传参(适合公开小数据,刷新不丢失)

适合传递id、页码等简短的公开数据,数据会直接拼接在URL中,刷新页面不会丢失:

  • 路由定义(以路径参数为例):
import { Router } from '@reach/router'
import TargetPage from './TargetPage'

<Router>
  {/* 定义路径参数占位符 */}
  <TargetPage path="/target-page/:userId" />
</Router>
  • 跳转页写法:
<Link to={`/target-page/123`}>跳转到目标页面</Link>

如果用查询参数写法:<Link to={/target-page?userId=123&userName=张三}>跳转</Link>

  • 目标页取值写法:
// 路径参数用useParams取值
import { useParams, useLocation } from '@reach/router'

const TargetPage = () => {
  // 取路径参数
  const { userId } = useParams()
  // 取查询参数需要自行解析location.search
  const searchParams = new URLSearchParams(useLocation().search)
  const userName = searchParams.get('userName')
  return <div>用户ID:{userId}</div>
}

方案3:全局状态管理传参(适合大体积、多页面共享的数据)

如果传递的数据需要在多个页面复用、或者数据体积较大,可直接用全局状态存储:

  • 跳转前把需要传递的数据存入全局状态(支持Context、Redux、Zustand、Mobx等任意状态管理方案)
  • 跳转到目标页面后,直接从全局状态中读取对应数据即可。

内容的提问来源于stack exchange,提问作者Riya Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:12:00