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

告别数据孤岛!React 路由 3 种传参方法全解析

React 路由组件传参指南:3 种方法让数据 “跑” 起来 🚀

作为前端开发者,我们经常需要在不同的路由组件之间传递数据。就像现实生活中传递信件一样,React 路由也有多种 “邮寄” 数据的方式。今天咱们就来聊聊 React 路由组件传递参数的 3 种方法,保证让你看完就能上手!

1. params 参数:最直接的 “地址栏” 传递 🏷️

params 参数就像是把包裹信息直接写在快递单的显眼位置,明明白白,一眼就能看到。

用法示例

路由链接(携带参数):

<Link to='/user/detail/tom/18'>查看Tom的详情</Link>

这里我们把用户名和年龄直接放在了 URL 路径中,就像/user/detail/姓名/年龄这样的格式。

注册路由(声明接收):

<Route path="/user/detail/:name/:age" component={UserDetail}/>

注意这里的:name和:age,它们就像是两个 “占位符”,告诉 React:“嘿,这两个位置会有参数传过来哦!”

接收参数:

在 UserDetail 组件中,我们可以这样获取参数:

componentDidMount() {const { name, age } = this.props.match.params;console.log(`接收到的用户信息:姓名=${name},年龄=${age}`);
}
运行效果

当点击链接后,地址栏会显示http://localhost:3000/user/detail/tom/18,在 UserDetail 组件中能成功获取到{name: ‘tom’, age: ‘18’}的参数对象。

适用场景

这种方式适合传递简单的、非敏感的数据,因为参数会直接显示在地址栏中。比如用户 ID、文章 ID 等。

2. search 参数:带 “问号” 的查询式传递 🔍

search 参数就像是在快递单上附了一张查询纸条,用问号开头,参数之间用 & 连接,非常灵活。

用法示例

路由链接(携带参数):

<Link to='/product/list?category=phone&price=1999'>手机列表</Link>

这里我们传递了商品分类和价格两个参数,格式就像?参数名1=值1&参数名2=值2。

注册路由(无需声明):

<Route path="/product/list" component={ProductList}/>

使用 search 参数时,注册路由不需要特别声明参数,正常注册即可,是不是很方便?

接收参数:

import querystring from 'querystring';
componentDidMount() {// 先获取到search字符串,格式是"?category=phone&price=1999"const search = this.props.location.search;// 去掉开头的问号const searchStr = search.slice(1);// 解析为对象const params = querystring.parse(searchStr);console.log('商品参数:', params); // {category: 'phone', price: '1999'}
}
运行效果

点击链接后,地址栏会显示http://localhost:3000/product/list?category=phone&price=1999。通过 querystring 解析后,我们得到了一个整洁的参数对象。

小提示

React 脚手架中已经内置了 querystring 模块,不需要额外安装。如果是在其他环境,可能需要npm install querystring哦。

3. state 参数:隐藏的 “携带者” 🤐

state 参数就像是把秘密信息交给了一个可靠的信使,它不会出现在地址栏中,但能安全地把信息带到目的地。

用法示例

路由链接(携带参数):

<Link to={{pathname: '/message/detail',state: {title: '春节放假通知',date: '2024-01-20',content: '今年春节放假7天'}
}}>查看放假通知
</Link>

这里我们通过一个对象的形式传递参数,pathname 指定路由路径,state 中存放我们要传递的数据。

注册路由(无需声明):

<Route path="/message/detail" component={MessageDetail}/>

使用 state 参数时,注册路由也不需要特别声明,正常写路径就好。

接收参数:

componentDidMount() {const { title, date, content } = this.props.location.state;console.log(`收到消息:${title},发布时间:${date}`);console.log(`消息内容:${content}`);
}
运行效果

点击链接后,地址栏显示http://localhost:3000/message/detail,看不到任何参数信息,但在 MessageDetail 组件中却能成功获取到 state 中的所有数据。更棒的是,即使刷新页面,这些参数也不会丢失!

适用场景

这种方式适合传递敏感数据或者较多的信息,因为参数不会暴露在地址栏中,而且刷新页面也能保留数据。

总结一下 📝

三种传递参数的方法各有千秋:

  • params 参数:简单直接,参数可见,适合传递少量简单数据
  • search 参数:灵活多样,参数可见,适合传递查询条件
  • state 参数:隐蔽安全,参数不可见,适合传递敏感或大量数据

就像邮寄包裹一样,根据包裹的内容和紧急程度,我们会选择不同的邮寄方式。在实际开发中,也可以根据具体需求选择合适的参数传递方式。希望这篇文章能帮你更好地掌握 React 路由组件的传参技巧,让你的数据在组件之间 “跑” 得更顺畅! 💨

http://www.lryc.cn/news/619143.html

相关文章:

  • [Robotics_py] 定位滤波器 | 预测与更新 | 扩展卡尔曼滤波器(`EKF`)
  • 嵌入式学习 标准IO(完整版)
  • 浏览器面试题及详细答案 88道(12-22)
  • 【C#补全计划】StringBuilder
  • 【shell脚本编程】-4 shell脚本编写冒泡排序
  • C++11新增关键字和范围for循环
  • Flutter ExpansionPanel组件(可收缩的列表)
  • Qt中定时器介绍和使用
  • Gradle(二)Gradle的优势、项目结构介绍
  • python2操作neo4j
  • HTTPS加密与私有CA配置全攻略
  • spring-cloud整合nacos详细攻略
  • 读《精益数据分析》:UGC平台的数据指标梳理
  • 11-docker单机版的容器编排工具docker-compose基本使用
  • 数据分析专栏记录之 -基础数学与统计知识
  • Threejs 设置灯光照射点位置 辅助器不跟随移动
  • 大数据中的数据压缩原理
  • QT第五讲-控件QLineEdit、QSpinBox、QSlider、QScrollBar、QDial、QProgressBar、QLCDNumber
  • 计算机网络摘星题库800题笔记 第4章 网络层
  • 前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!笔记
  • MCU中的液晶显示屏LCD(Liquid Crystal Display)控制器
  • VUE的8个生命周期
  • C++list(2)
  • 【JavaEE】多线程之线程安全(上)
  • 串口通信学习
  • 【PyTorch学习笔记 - 03】 Transforms
  • Spring-Cache 缓存数据
  • Dubbo 3.x源码(33)—Dubbo Consumer接收服务调用响应
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:UART Controller,通用异步收发传输器控制器
  • I2C 接收与发送数据的流程