您现在的位置是:网站首页> 编程资料编程资料
React路由参数传递与嵌套路由的实现详细讲解_React_
2023-05-24
412人已围观
简介 React路由参数传递与嵌套路由的实现详细讲解_React_
1. 页面路由参数传递
1.1 动态路由参数
描述:
以“/detail/:id”形式传递的数据,在落地组件中通过this.props.match.params得到。
使用:
App.jsx:
import React, { Component } from 'react' import { Route, Link, NavLink, Switch, Redirect } from 'react-router-dom' // 匹配成功后渲染的组件 import Home from './views/Home' import About from './views/About' import Detail from './views/Detail' import Notfound from './views/Notfound' class App extends Component { render() { return ( App组件
Home --- About
{/* /detail/1 /detail/2 ... 匹配成功;参数可以传递多个 */} ) } } export default Appabout页面:
import React, { Component } from 'react' import { Link } from 'react-router-dom' class About extends Component { render() { return ( 关于我们
{Array(10) .fill('') .map((_, index) => ( - 新闻 -- {index}
))}
) } } export default About详情页面:
import React, { Component } from 'react' class Detail extends Component { render() { // 获取动态路由参数 对象 let id = this.props.match.params.id || 0 return ( 详情页面 --- {id}
) } } export default Detail
1.2 search字符串
描述:
通过地址栏中的 ?key=value&key=value传递。
使用:
关于页面:
import React, { Component } from 'react' import { Link } from 'react-router-dom' class About extends Component { render() { return ( 关于我们
{Array(10) .fill('') .map((_, index) => ( - 新闻 -- {index}
))}
) } } export default About详情页面:
import React, { Component } from 'react' import qs from 'querystring' // 封装一个方法,获取数据 // String.prototype.toSearch = function () { // let searchData = {} // const search = new URLSearchParams(this) // search.forEach((value, key) => { // searchData[key] = value // }) // return searchData // } class Detail extends Component { render() { // 获取动态路由参数 对象 let id = this.props.match.params.id || 0 // search字符串 字符串 console.log(this.props.location.search) // 将字符串转为对象 console.log(qs.parse(this.props.location.search.slice(1))) // 如果用search字符串,推荐用它 const search = new URLSearchParams(this.props.location.search) // 获取就字段数据 console.log(search.get('age')) let searchData = {} search.forEach((value, key) => { searchData[key] = value }) console.log(searchData) // 使用迭代对象获取 // for (let [key, value] of search.entries()) { // searchData[key] = value // } // console.log(searchData) // 使用封装的方法获取 // console.log(this.props.location.search.toSearch()) return ( 详情页面 --- {id}
) } } export default Detail
1.3 页面参数隐式传递
描述:
隐式传参(state),通过地址栏是观察不到的;通过路由对象中的state属性进行数据传递,在落地组件中通过this.props.location.state得到。
使用:
home页面:
import React, { Component } from 'react' import { Link } from 'react-router-dom' class Home extends Component { jumpDetail = () => { this.props.history.push({ pathname: '/detail', search: 'name=zhangsan', state: { id: 200 } }) } render() { return ( {/* 通过state隐式来传递数据到目标页面 */} 去详情
{/* 编程式导航 */} ) } } export default Home详情页面:
import React, { Component } from 'react' class Detail extends Component { render() { // 获取页面隐式传过来的state数据 对象 console.log(this.props.location.state) console.log(this.props.location.search.toSearch()) return ( 详情页面
) } } export default Detailtosearch方法(已导入入口文件中,所以可以直接使用):
String.prototype.toSearch = function () { let searchData = {} if (this.toString() != '') { const search = new URLSearchParams(this.toString()) search.forEach((value, key) => { searchData[key] = value }) } return searchData }
2. 嵌套路由
后台首页:
import React, { Component } from 'react' import { NavLink, Redirect, Route, Switch } from 'react-router-dom' import { AdminContainer } from './style' import Index from '../Index' import User from '../User' class Admin extends Component { render() { // 在子路由定义的组件中,可以通过props中提供的路由对象来获取父路由定义的地址 // let parentRoutePath = this.props.match.path return ( 后台首页
后台首页 用户列表
// // 后台首页
// // // - //
后台首页 // // - //
用户列表 // //
// // // // // // // // // ) } } export default Admin
到此这篇关于React路由参数传递与嵌套路由的实现详细讲解的文章就介绍到这了,更多相关React路由参数传递内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- React通过classnames库添加类的方法_React_
- React路由渲染方式与withRouter高阶组件及自定义导航组件应用详细介绍_React_
- 使用nodejs解析json数据_node.js_
- React状态管理Redux的使用介绍详解_React_
- 停止编写 API函数原因示例分析_JavaScript_
- 一次vue项目优化的实际操作记录_vue.js_
- Nodejs如何使用http标准库异步加载https请求json数据_node.js_
- Typescrip异步函数Promise使用方式_javascript技巧_
- Typescript使用修饰器混合方法到类的实例_javascript技巧_
- vue3 hook自动导入原理解析_vue.js_
