react-31-路由传参

简介: 传参一直都是重点一起梳理下 有哪些路由传参的方式本章节代码在react-路由配置基础上进行

1. 前言


传参一直都是重点

一起梳理下 有哪些路由传参的方式

本章节代码在react-路由配置基础上进行


2. 动态路由 传参


2.1 易犯问题

1]W[{P]%`B2O`]ZJ06[7EWV.png

2.2 易犯问题解决

上面这样写就匹配不到了 该走404了

解决方案 和vue也一样

:绑定变量

路由写法


<Route exact path="/search/:cityId" component={CitySearchComponet} />


2.3 跳转

通过 Link 跳转

我这里为了测试,其实这个跳转是写在 城市界面的


<h1>城市列表</h1>
        {/* <p>  <Link to='/search/24'> 搜索--1. 动态路由</Link>  </p> */}
  {/* 不同的写法 */}
       <Link to={`/search/${cityId}`}> 搜索--</Link>


2.3  获取路由传值

界面的 钩子函数 componentDidMount

E](IFA}X_ZZ9`6RFU$4T%G3.png

this.props.match.params 得到参数


let {cityId} = this.props.match.params


2.4 动态路由传参总结

  1. 使用起来简单,因为接收和传参都比较方便
  2. 正因为简单,所以传输复杂数据类型的时候 就不方便


3. path路径传参


3.1  跳转代码

就是路径拼接 地址栏 ? 后面的形式


return (
            <div>
                <h1>城市列表</h1>
                <p>
                    <Link to='/search/123456'> 搜索 传参方式-1: 动态路由</Link>
                </p>
                <p>
                    <Link to='search/123?name=yzs&age=30'> 搜索 传参方式-2: path路径</Link>
                </p>
            </div>
        )


3.2 结果

8FFRN_`[`}92Y07)}GYBT_J.png


3.3 获取参数

this.props.location.search获取字符串,再手动解析

简单的字符串分割 ,加上遍历 转为对象就行


4. 隐式路由传参


其实仔细观察上个截图,发现里面有个state属性

4.1 跳转配置


<p>
                    <Link to={
                        {
                            pathname:"search/321",
                            state:{
                                name:"yzs",
                                age:30
                            }
                        }
                    }> 搜索 传参方式-3: 隐式 state</Link>
                </p>


4.2 结果

_LIQSE1YT01MEZ`URNB`LBN.png


4.3 获取


let {name ,age} = this.props.location.state

location里面 通过state获取,

相比path路径传参 方便的多

而且地址栏也不可见 ,所以是隐式的相对安全

最大缺点 就是 一刷新 就没有了


5. 组件之间传参


组件之间传参需要改造路由

必须通过render渲染函数来写

5.1 改造路由

{...routeProps} 展开运算符

name='yzs'  典型的 父子组件通过 属性传参


import MyComponent from '../my' 
 <Route exact path="/search/:cityId" component={CitySearchComponet} />
                    <Route exact path="/my" render={
                        // 外层的{} 表示 变量 这是 react 的语法
                        (routeProps)=>{
                            // routeProps是路由传递的参数
                            return(
                                //  在原有路由组件参数的情况的下,增加新的参数
                                <MyComponent  {...routeProps}  name='yzs' age={30} />
                            )
                        }
                    } />


5.2  MyComponent  组件

pages/my/index.js


import React, { Component } from 'react'
export default class MyComponent extends Component {
    render() {
        console.log("我的界面:",this.props)
        return (
            <div>
                <h1>关于我的传说</h1>
            </div>
        )
    }
}


5.3 跳转配置


return (
            <div>
                <h1>城市列表</h1>
                <p>
                    <Link to='/search/123456'> 搜索 传参方式-1: 动态路由</Link>
                </p>
                <p>
                    <Link to='search/123?name=yzs&age=30'> 搜索 传参方式-2: path路径</Link>
                </p>
                <p>
                    <Link to={
                        {
                            pathname:"search/321",
                            state:{
                                name:"yzs",
                                age:30
                            }
                        }
                    }> 搜索 传参方式-3: 隐式 state</Link>
                </p>
                <p>
                    <Link to='my'> 搜索 传参方式-4: 组件间传值</Link>
                </p>
            </div>
        )


5.4 结果

@GX0F3@@{%4INT79]4ZPIQQ.png


5.5 获取


console.log("我的",this.props)
        //直接就可以解构出来
        let {name,age} = this.props

这种方式 传参 略嫌麻烦,但是接收参数非常方便,

不影响路由组件自带参数,用户也看不到,综合了上述的优点


6. 函数式组件接收参数


6.1 核心代码


import React from 'react'
import {Link} from 'react-router-dom'
export default function index(props) {
    console.log("函数式组件",props)
    return (
        <div>
            {/* 1. 最简单的跳转  Link 对标 Vue的  router-link 也是渲染成[图片上传中...(1.png-8082c1-1629301696921-0)]
a标签 */}
            <h1>  <button onClick={()=>{
                props.history.goBack()
            }}> 返回</button>
              404 Not Found   <Link to="/">首页</Link>   </h1>
        </div>
    )
}


6.2 分析

{C3U_PYUTG(J`H4WA(KJ5N5.png


1.函数式组件参数要  写明 props

2.类组件的话 需要写 this.props ,函数组件里面使用this不方便,所以是参数的形式传递的

3.里面也具备 我们的 路径传参数对应的  location

4.也有 动态路由传参  对应的 match

5.也有这个编程式导航的 history参数




相关文章
|
3月前
|
前端开发 JavaScript
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
本文介绍了在React项目中实现路由懒加载的方法,使用React提供的`lazy`和`Suspense`来优化项目首次加载的速度。通过将路由组件改为懒加载的方式,可以显著减少初始包的大小,从而加快首次加载速度。文章还展示了如何使用`Suspense`组件包裹`Switch`来实现懒加载过程中的fallback效果,并提供了使用前后的加载时间对比,说明了懒加载对性能的提升作用。
212 2
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
|
1月前
|
前端开发 API UED
React 路由守卫 Guarded Routes
【10月更文挑战第26天】本文介绍了 React 中的路由守卫(Guarded Routes),使用 `react-router-dom` 实现权限验证、登录验证和数据预加载等场景。通过创建 `AuthContext` 管理认证状态,实现 `PrivateRoute` 组件进行路由保护,并在 `App.js` 中使用。文章还讨论了常见问题和易错点,提供了处理异步操作的示例,帮助开发者提升应用的安全性和用户体验。
48 1
|
4月前
|
移动开发 资源调度 前端开发
介绍React路由模式
【8月更文挑战第10天】介绍React路由模式
62 12
|
1月前
|
前端开发 安全 网络安全
React——路由Route
React——路由Route
34 2
React——路由Route
|
2月前
|
资源调度 前端开发 测试技术
React Router 路由管理
【10月更文挑战第10天】本文介绍了 React Router,一个在 React 应用中管理路由的强大工具。内容涵盖基本概念、安装与使用方法、常见问题及解决方案,如路由嵌套、动态路由和路由守卫等,并提供代码示例。通过学习本文,开发者可以更高效地使用 React Router,提升应用的导航体验和安全性。
286 19
|
2月前
|
前端开发 网络架构
React 路由
10月更文挑战第11天
34 2
|
2月前
|
前端开发 JavaScript 网络架构
实现动态路由与状态管理的SPA——使用React Router与Redux
【10月更文挑战第1天】实现动态路由与状态管理的SPA——使用React Router与Redux
39 1
|
3月前
|
前端开发 Python
React技术栈-React路由插件之自定义组件标签
关于React技术栈中React路由插件自定义组件标签的教程。
59 4
React技术栈-React路由插件之自定义组件标签
|
3月前
|
移动开发 前端开发 应用服务中间件
React两种路由模式的实现原理
React两种路由模式的实现原理
97 3
|
3月前
|
前端开发 程序员 API
React技术栈-React路由插件之react-router的基本使用
这篇博客介绍了React路由插件react-router的基本使用,包括其概念、API、以及如何通过实战案例在React应用中实现SPA(单页Web应用)的路由管理。
76 9