八、【React-Router5】路由组件传参

news2024/10/6 14:33:39

文章目录

  • 1、实现效果
  • 2、向路由组件传递参数总览
  • 3、修改上一节代码
    • 3.1、项目结构变更如下
    • 3.2、CODE(params传参)
      • 3.2.1、Messages.jsx
      • 3.2.2、Detail.jsx
      • 3.2.3、Result
    • 3.3、CODE(search传参)
      • 3.3.1、Messages.jsx
      • 3.3.2、Detail.jsx
      • 3.3.3、Result
    • 3.3、CODE(state传参)
      • 3.3.1、Messages.jsx
      • 3.3.2、Detail.jsx
      • 3.3.3、Result

1、实现效果

在这里插入图片描述

2、向路由组件传递参数总览

  1. params 参数
    1. 路由链接(携带参数):<Link to='/demo/test/tom/18'}>详情</Link>
    2. 注册路由(声明接收):<Route path="/demo/test/:name/:age" component={Test}/>
    3. 接收参数:this.props.match.params
  2. search 参数
    1. 路由链接(携带参数):<Link to='/demo/test?name=tom&age=18'}>详情</Link>
    2. 注册路由(无需声明,正常注册即可):<Route path="/demo/test" component={Test}/>
    3. 接收参数:this.props.location.search
    4. 备注:获取到的 search 是 urlencoded 编码字符串,需要借助 qs(react内置无需额外下载) 解析
      1. import qs from 'qs'
      2. 用法和 JSON 一样
  3. state 参数 最常用
    1. 路由链接(携带参数):<Link to={{pathname:'/demo/test',state:{name:'tom',age:18}}}>详情</Link>
    2. 注册路由(无需声明,正常注册即可):<Route path="/demo/test" component={Test}/>
    3. 接收参数:this.props.location.state
    4. 备注:BrowserRouter 刷新可以保留住参数,HashRouter 刷新不会保留参数

3、修改上一节代码

点击访问 上节代码;有点套娃,请耐心查看

3.1、项目结构变更如下

在这里插入图片描述

3.2、CODE(params传参)

3.2.1、Messages.jsx

import React, { Component } from 'react'
import { Link, Route } from 'react-router-dom'
import Detail from './Detail/item'

export default class Message extends Component {
    state = {
        messages: [{
            id: '001',
            title: '小道消息',
            info: '这是一个小道消息'
        }, {
            id: '002',
            title: '大道消息',
            info: '这是一个大道消息,非常大!!!'
        }, {
            id: '003',
            title: '大道消息Plus',
            info: '这是大道消息Plus,非常Plus!!!'
        }]
    }

    render() {
        return (
            <div>
                <ul>
                    {
                        this.state.messages.map(m => (
                            <li key={m.id}>
                                <Link 
                                    className="list-group-item" 
                                    to={`/home/message/detail/${m.id}/${m.title}/${m.info}`}
                                >
                                	{m.title}
                                </Link>
                            </li>
                        ))
                    }
                </ul>
                <hr />
                <Route path='/home/message/detail/:id/:title/:info' component={Detail} />
            </div>
        )
    }
}

3.2.2、Detail.jsx

import React, { Component } from 'react'

export default class Detail extends Component {
    render() {
        const { id, title, info } = this.props.match.params
        return (
            <ul>
                <li>id:{id}</li>
                <li>title:{title}</li>
                <li>info:{info}</li>
            </ul>
        )
    }
}

3.2.3、Result

在这里插入图片描述

3.3、CODE(search传参)

3.3.1、Messages.jsx

只修改了 render

render() {
    return (
        <div>
        	<ul>
        		{
            		this.state.messages.map(m => (
            			<li key={m.id}>
        					<Link 
                                className="list-group-item" 
                                to={`/home/message/detail?id=${m.id}&title=${m.title}&info=${m.info}`}
                            >
                            	{m.title}
                            </Link>
        				</li>
                	))
             	}
             </ul>
             <hr />
             <Route path='/home/message/detail' component={Detail} />
        </div>
    )
}

3.3.2、Detail.jsx

import React, { Component } from 'react'
import qs from 'qs'

export default class Detail extends Component {
    render() {
        const { search } = this.props.location
        const { id, title, info } = qs.parse(search.split('?')[1])
        return (
            <ul>
                <li>id:{id}</li>
                <li>title:{title}</li>
                <li>info:{info}</li>
            </ul>
        )
    }
}

3.3.3、Result

略…

3.3、CODE(state传参)

3.3.1、Messages.jsx

只修改了 render

注意!!!BrowserRouter 刷新可以保留住参数,HashRouter 刷新不会保留参数!

render() {
    return (
        <div>
            <ul>
                {
                    this.state.messages.map(m => (
                        <li key={m.id}>
                            <Link className="list-group-item" to={{
                                pathname: '/home/message/detail',
                                state: m
                            }}>{m.title}</Link>
                        </li>
                    ))
                }
            </ul>
            <hr />
            <Route path='/home/message/detail' component={Detail} />
        </div>
    )
}

3.3.2、Detail.jsx

import React, { Component } from 'react'
//import qs from 'qs'

export default class Detail extends Component {
    render() {
        const { id, title, info } = this.props.location.state || {}
        return (
            <ul>
                <li>id:{id}</li>
                <li>title:{title}</li>
                <li>info:{info}</li>
            </ul>
        )
    }
}

3.3.3、Result

略…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【强化学习论文】小样本策略泛化的提示决策转换器

文献题目&#xff1a;Prompting Decision Transformer for Few-Shot Policy Generalization 摘要 人类可以利用先前的经验并从少量演示中学习新任务。与旨在通过更好的算法设计实现快速适应的离线元强化学习相比&#xff0c;我们研究了架构归纳偏差对少样本学习能力的影响。我…

RationalDMIS2022车削件(轴类)测量:回转体检测

1.坐标系知识 在三坐标测量机的使用中,坐标系的建立是最为关键的一步,是工件测量的基本依据。设备在组装本身中有着XYZ三个互相垂直的坐标轴,因此坐标系的建立便是通过以工件上的特征作为依据建立XYZ三个互相垂直的坐标轴与设备的坐标轴进行对应,从而使程序得以运行。 物…

虚拟机安装

虚拟机安装 能看到这里说明你的电脑中已经安装的有虚拟机了&#xff0c;如果没有虚拟机可以先下载安装一些虚拟机。 有了虚拟机后首先要准备的就是镜像&#xff0c;我用的是CentOS-7。如果没有的也可以百度或者去阿里云下载即可。 选择下载以ISO结尾的文件&#xff0c;可选类型…

SLAM学习笔记(二)

5.相机与图像 相机将三维世界中的坐标点&#xff08;单位米&#xff09;映射到二维图像平面&#xff08;单位为像素&#xff09;的过程中能够用一个几何模型进行描述。 单目相机(Mono)的成像过程&#xff1a; 1、世界坐标系下有个固定的点P&#xff0c;世界坐标为 2、由于相…

关于quartus 13.1出现的问题的一些总结

1&#xff0c;如果IP核的版本与当前的quartus ii版本不一致的情况&#xff0c;有时候虽然能编译成功&#xff0c;但是无法修改原有工程的IP核参数设置。 如&#xff1a; 之前我下载的工程用到的NCO IP核是12.1 version的&#xff0c;但是我用到的quartus 版本是13.0和13.1&am…

led灯什么牌子的质量好?2022双十二家用护眼台灯推荐

台灯作为一种晚上或者其他黑暗条件下的照明灯具&#xff0c;对于经常熬夜的人群来说可以说是必备工具了&#xff0c;无论是看书、写字&#xff0c;还是工作、学习&#xff0c;都非常实用&#xff0c;它不同于平常的家用的室内照明顶灯&#xff0c;光线不会那么刺眼&#xff0c;…

uni-app入门:小程序UI组件Vant Weapp

1.vant介绍 2.安装步骤 2.1 通过 npm 安装 2.2 修改 app.json 2.3 修改 project.config.json 2.4 构建 npm 包 3.使用说明 1.vant介绍Vant Weapp 是一个轻量、可靠的移动端组件库&#xff0c;于 2017 年开源,是由有赞前端团队开…

Mysql 安装与卸载

MySQL8.0.26-Linux版安装 文章目录MySQL8.0.26-Linux版安装1. 安装1.1 准备一台Linux服务器1.2. 下载Linux版MySQL安装包1.3. 上传MySQL安装包1.4. 创建目录,并解压1.5. 安装mysql的安装包1.6. 启动MySQL服务1.7. 查询自动生成的root用户密码1.8. 修改root用户密码1.9. 创建用户…

【FRP】群晖docker中部署Frp

2022-08-24 by 崔斐然 0&#xff1a;需求 公司有台笔记本&#xff0c;现在疫情期间居家办公。我用的MacBook RDP客户端做的非常好用&#xff0c;如相互粘贴文件、文字等&#xff0c;MacBook通过远程桌面连接公司内网电脑会比较方便&#xff0c;时延和体验感远优于向日葵。之前…

java成神之路-基础篇 (搞定java基础看这一篇就够用)

java成神之路-基础篇 文章目录java成神之路-基础篇[toc]01面向对象**→ 什么是面向对象**→ 平台无关性→ 值传递1、什么是[值传递](https://so.csdn.net/so/search?q值传递&spm1001.2101.3001.7020)&#xff0c;什么是引用传递&#xff1f;2.值传递和[引用传递](https://…

23软考备考已开始,网络工程师知识点速记~

新一轮软考备考来啦~ 为了帮助大家提高备考效率&#xff0c;将2023上半年软考网络工程师知识点速记分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01; 进制的转换 数据的表示方法有二进制、八进制、十进制和十六进制等。网络工程师考试要求重点掌握这四种进制之间的…

mysql基础知识篇(六)

1.如何分库&#xff1f; 垂直分库&#xff1a;以表为依据&#xff0c;按照业务归属不同&#xff0c;将不同的表拆分到不同的库中。 水平分库&#xff1a;以字段为依据&#xff0c;按照一定策略&#xff08;hash、range 等&#xff09;&#xff0c;将一个库中的数据拆分到多个库…

线代 | 【提神醒脑】自用笔记串联三 —— 相似对角化 · 二次型 · 合同变换

本文总结参考于 kira 2023 线代提神醒脑技巧班。 笔记均为自用整理。加油!ヾ(◍∇◍)ノ゙ 九、相似对角化 9.1、矩阵相似的性质 ----------------------------------------------------------------------------------------------------------…

Linux 网络编程项目 —— FTP 网盘

文章目录项目简介知识点描述项目功能指令远程功能指令本地功能指令使用的关键函数access 函数popen 函数chdir 函数strtok 函数strncmp 函数linux system函数是否执行成功判断方法基本流程服务端客户端FTP代码实例头文件 ftp.h客户端 client.c服务端 server.cV2.0版 – 启用副服…

如何实现虹科物联网HMI/网关的调度器功能?

一、前言 JMobile软件提供了一个调度器引擎&#xff0c;通过设定的时间计划表自动执行特定动作&#xff0c;从而赋予HMI/网关调度器功能&#xff0c;减少现场操作人员的工作压力。本文主要介绍如何实现JMobile软件的调度器功能。 二、工具 1. Windows PC 2. JMobile Studio…

《论文阅读》DeepSFM: Structure From Motion Via Deep Bundle Adjustment

留个笔记自用 DeepSFM: Structure From Motion Via Deep Bundle Adjustment 做什么 首先是最基础的&#xff0c;Structure-from-Motion&#xff08;SFM&#xff09;&#xff0c;SFM可以简单翻译成运动估计&#xff0c;是一种基于dui8序列图片进行三维重建的算法。简单来说就…

C++11(三)可变模板参数、lambda表达式、包装器

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、可变模板参数1.通过递归推导参数包2.通过列表初始化推导参数包二、emplace三、lambda表达式1.lambda表达式语法2.使用lambda3.捕捉列表说…

phpstorm+wamp在线调试wordpress

简介 本文源自公司内部使用wordpress搭建了一套官网&#xff0c;经常有定制化的需求&#xff0c;有些插件实现不了&#xff0c;需要通过phpstorm调试的方式熟悉wordpress&#xff0c;同时修改php代码&#xff0c;本地测试环境window&#xff0c;适合用wamp作为php运行环境&…

解放你的双手----WIN7设置自动化任务

近期在使用双屏工具DualMonitor的时候遇到一个问题&#xff0c;每次电脑锁屏超过一定时常之后&#xff0c;登录解锁该软件虽然在运行但是功能失效了&#xff0c;需要手动关闭打开该程序&#xff0c;一时也没找到有效的解决方法和替代软件&#xff0c;于是就想着能不能在我登录解…

数据存储——存储图像

图像数字化&#xff08;一&#xff09;图像数字化1.图像采样2.数字图像的技术指标3.编码&#xff08;三&#xff09;数字图像的分类1.光栅图2.矢量图总结&#xff1a;图像数字化的过程&#xff08;一&#xff09;图像数字化 按一定空间间隔&#xff0c;自左至右&#xff0c;自…