React学习笔记 -- 组件通信之路由传参(react-router-dom)

super(props)

this.state = {

id: this.props.match.params.id //此处获取通过path动态参数拼接传过来的信息

}

}

componentDidMount(){

console.log(this.props,‘users props’)

}

render() {

return (

我是users:{this.state.id}

)

}

}

export default Users

获取:this.props.match.params.id

可以打印props,查看里面的内容,不难发现,props中存在该信息

那么对应的编程式跳转为:

<button onClick={() => { this.props.history.push({ pathname: ‘/home/users/999’ }) }}>about

//同样,用this.props.match.params.id进行取值

第二种传参方法为query,通过参数query将信息传递过去

获取:this.props.location.query.text

同样,打印出来看看

对应的编程式跳转为:

<button onClick={() => { this.props.history.push({ pathname: ‘/home/users/999’, query: { text: ‘666’ } }) }}>Users

//同样,获取方式this.props.location.query.text

第三种传参方法为state,通过参数state将信息传递过去,用法与query一致

获取:this.props.location.state.text

同样,打印出来看看

对应的编程式跳转为:

<button onClick={() => { this.props.history.push({ pathname: ‘/home/users/999’, state: { text: ‘666’ } }) }}>Users

//同样,获取方式this.props.location.state.text

**ps:**query跟state用一个重要的区别,那就是在页面跳转之后,重新刷新当前页面,query会消失,而state不会消失,即依然保存在location中。

不妨测试一下,对Users.js页面进行修改,如果query不存在,显示“query已消失”

import React from “react”;

class Users extends React.Component {

constructor(props) {

super(props)

this.state = {

text: this.props.location.query ? this.props.location.query.text : ‘query已消失’

}

}

componentDidMount(){

console.log(this.props,‘users props’)

}

render() {

return (

我是users:{this.state.text}

)

}

}

export default Users

通过跳转,获取数据正常,query存在

重新刷新当前页面,则query消失

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

前端面试题汇总

JavaScript

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

性能

linux

前端资料汇总

频】](https://bbs.csdn.net/topics/618166371)**

性能

linux

前端资料汇总

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Router v6中,路由传参可以通过以下几种方式实现: 1. 使用URL参数传递数据: 在路由路径中使用冒号(:)定义参数,然后在组件中通过`useParams`钩子函数获取参数的值。例如: ```jsx import { BrowserRouter as Router, Routes, Route, Link, useParams } from 'react-router-dom'; function User() { const { id } = useParams(); return <h2>User ID: {id}</h2>; } function App() { return ( <Router> <nav> <ul> <li> <Link to="/user/1">User 1</Link> </li> <li> <Link to="/user/2">User 2</Link> </li> </ul> </nav> <Routes> <Route path="/user/:id" element={<User />} /> </Routes> </Router> ); } export default App; ``` 当点击链接时,会根据参数的不同显示不同的用户ID。 2. 使用查询参数传递数据: 在URL中使用查询参数传递数据,可以通过`useLocation`钩子函数获取查询参数的值。例如: ```jsx import { BrowserRouter as Router, Routes, Route, Link, useLocation } from 'react-router-dom'; function User() { const location = useLocation(); const params = new URLSearchParams(location.search); const name = params.get('name'); return <h2>Hello, {name}</h2>; } function App() { return ( <Router> <nav> <ul> <li> <Link to="/user?name=John">User John</Link> </li> <li> <Link to="/user?name=Jane">User Jane</Link> </li> </ul> </nav> <Routes> <Route path="/user" element={<User />} /> </Routes> </Router> ); } export default App; ``` 当点击链接时,会根据查询参数的不同显示不同的用户名称。 3. 使用状态传递数据: 在React Router v6中,可以使用状态传递数据。通过使用`useNavigate`钩子函数获取导航函数,然后在组件中使用状态来传递数据。例如: ```jsx import { BrowserRouter as Router, Routes, Route, Link, useNavigate } from 'react-router-dom'; import { useState } from 'react'; function User() { const navigate = useNavigate(); const [name, setName] = useState(''); const handleSubmit = (e) => { e.preventDefault(); navigate(`/user/${name}`); }; return ( <div> <form onSubmit={handleSubmit}> <input type="text" value={name} onChange={(e) => setName(e.target.value)} /> <button type="submit">Go</button> </form> </div> ); } function UserDetails() { const { name } = useParams(); return <h2>Hello, {name}</h2>; } function App() { return ( <Router> <nav> <ul> <li> <Link to="/user">User</Link> </li> </ul> </nav> <Routes> <Route path="/user" element={<User />} /> <Route path="/user/:name" element={<UserDetails />} /> </Routes> </Router> ); } export default App; ``` 当在输入框中输入用户名并点击提交按钮时,会根据输入的用户名显示相应的用户详情。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值