当前位置: 首页 > news >正文

React15 - React-Router v3 如何在react15项目中进行路由跳转和数据传递

在 React 15 项目中使用 React Router v3 进行路由跳转和数据传递,核心是理解其集中式路由配置和基于 props 的数据流。下面我们分别来看跳转和传参的具体实现。

路由跳转

React Router v3 提供了三种主要的路由跳转方式,你可以根据使用场景灵活选择。

跳转方式 使用场景 示例代码 数据传递支持
<Link> 组件 在视图层声明式地创建导航链接,如菜单、按钮 。 <Link to="/user/123">用户详情</Link> 支持通过 querystate 传递数据 。
this.props.router.push 在业务逻辑(如数据请求成功后)或事件处理函数中进行命令式跳转 。 this.props.router.push('/about') 同样支持 querystate 传参 。
browserHistory.push 在非React组件(如工具函数、Store)或组件树深层中需要跳转时使用 。 import { browserHistory } from 'react-router';
browserHistory.push('/about')
支持 querystate

💡 关于 this.props.router:在 React Router v3 中,通过路由直接渲染的组件,其 props 中会自动包含 router 对象,可以直接调用 push 方法 。

数据传递

React Router v3 主要通过三种方式将数据传递给目标组件,它们都挂在组件的 props 上。

1. 动态路由参数 (params)

这是最基本的方式,用于将数据直接嵌入在 URL 路径中,比如资源的 ID 。

  • 配置路由:在路由的 path 中使用冒号 : 定义参数。
    <Route path="/user/:userId" component={UserProfile} />
    
  • 发起跳转
    <Link to="/user/123">张三</Link>
    // 或
    this.props.router.push('/user/123')
    
  • 目标组件接收
    // 在 UserProfile 组件中
    render() {// 通过 this.props.params 获取const { userId } = this.props.params;return <div>用户ID: {userId}</div>;
    }
    

2. 查询字符串 (query)

适用于传递非敏感、可选或用于过滤、分页的参数,参数会以明文形式附加在 URL 的 ? 后面 。

  • 配置路由:无需在 path 中特殊定义,所有路由默认支持。
    <Route path="/search" component={SearchResults} />
    
  • 发起跳转:通过一个对象来指定 pathnamequery
    <Link to={{ pathname: '/search', query: { keyword: 'react', page: 1 } }}>搜索</Link>
    // 或
    this.props.router.push({ pathname: '/search', query: { keyword: 'react', page: 1 } })
    
  • 目标组件接收
    // 在 SearchResults 组件中
    render() {// 通过 this.props.location.query 获取const { keyword, page } = this.props.location.query;return <div>搜索关键词: {keyword}, 页码: {page}</div>;
    }
    

3. 状态 (state)

这种方式传递的数据不会显示在 URL 中,类似于 POST 方式,适合传递敏感或体积较大的数据(如表单提交后传递整个对象),但刷新页面后数据会丢失 。

  • 配置路由:同样无需特殊定义。
    <Route path="/confirm" component={OrderConfirmation} />
    
  • 发起跳转:通过对象中的 state 属性传递。
    const orderData = { orderId: 'xxx', items: [...] };
    <Link to={{ pathname: '/confirm', state: orderData }}>查看订单</Link>
    // 或
    this.props.router.push({ pathname: '/confirm', state: orderData })
    
  • 目标组件接收
    // 在 OrderConfirmation 组件中
    render() {// 通过 this.props.location.state 获取const orderData = this.props.location.state;return <div>订单ID: {orderData.orderId}</div>;
    }
    

传递方式对比

传递方式 数据存放位置 URL 可见性 刷新后是否保留 适用场景
params URL 路径 资源 ID、页面标识等核心参数
query URL 查询字符串 过滤、搜索、分页等非核心参数
state 内存对象 表单数据、操作状态等敏感或复杂数据

总结

在 React 15 项目中,React Router v3 的路由跳转和数据传递机制非常清晰:

  • 使用 <Link>router.pushbrowserHistory.push 来触发跳转。
  • 通过 paramsquerystate 三种方式,在目标组件中通过 props 获取传递过来的数据,它们分别适用于不同的传参需求 。
http://www.jsqmd.com/news/482460/

相关文章:

  • 【JAVA基础09】—— 赋值与三元运算符:从基础到实操的避坑指南
  • python创建env环境的金字教程
  • 中国服务外包杯D6类赛题进展
  • React15 - react-router v3 版本在react v15当中的使用
  • 提升学术成果的利器:9大查重工具全面解析
  • 学术写作必备:9款查重工具详细对比与使用技巧
  • 【稳定EI检索】第二届桥隧建设与工程国际学术会议(BTCE 2026)
  • 论文质量升级指南:9款查重工具精准评测
  • 优化论文质量的实用工具:9款高效查重软件深度测评
  • parser.add_argument(“experiment_dir“, type=str)和parser.add_argument(“--experiment_dir“, type=str)的区别
  • 【HarmonyOS 6】个人中心数据可视化实战
  • PAT 乙级 1113
  • React15 - 在ruducer中以对象映射替代switch语句
  • 第10章 矩阵分解:拆解复杂矩阵,简化工程应用
  • Hadoop生态中的数据生命周期管理技术深度剖析
  • **图神经网络实战:用PyTorch Geometric构建社交关系预测模型**在当前人工
  • UV 使用指南
  • **发散创新:基于Python的伦理黑客实战演练——从漏洞探测到防御加固全流程解
  • AI 工程化实战:5分钟带你快速掌握 Function Calling!
  • React15 - 在redux应用中数据存储位置探讨
  • 魔术橡皮 3.1.17 | 无限次AI生图,AI橡皮,图片AI编辑修改
  • 《C++实战项目-高并发内存池》7.大块内存的申请与释放
  • 实战|AI应用架构师用GNN构建智能客服的意图识别
  • Qt Creator + MSVC 2022 64bit 配置 Dump 文件生成与分析流程
  • IBM助力实现费曼量子模拟愿景
  • 微软在Windows 11中新增Xbox模式
  • Redux - 在ruducer中以对象映射替代switch语句
  • 洛谷 B4500:[GESP202603 三级] 凯撒密码 ← 字符串
  • 【原】Python+AI学习笔记(01)大模型调用准备工作 与 OpenAI库基础使用
  • Omsk Metro的题解