• react路由传参3种方式


    路由传参

    不管是vue还是react 无外乎就是通过
    link路由跳转,
    使用js传参,
    或者this.props.history.push()页面跳转,
    再或者是query ,
    params 传参。

    通常是把参数放在路径后边拼接。或者通过对象的方式传过去,页面进行接收。
    简单说一下我们常见的方式,
    最后说一下也是比较常用的方式(loaction , state)

    **一、params传参
    1,刷新页面后参数不消失,
    2,参数会在地址栏显示
    3,需要在Route中配置参数名称
    缺点:传值太多不方便而且url会变的很长。
    二:query传参:路由页面(无需配置)
    优点:传参优雅,传递参数可传对象;
    缺点:刷新地址栏,参数丢失。
    三.search 传参
    优点:页面刷新,参数不会丢失;
    缺点:传值太多url也会变的很长。
    四:state传参
    刷新页面后参数不消失
    参数不会在地址栏显示
    路由页面(无需配置)
    优点:传参优雅,传递参数可传对象;
    缺点:使用HashRouter的话,刷新页面,参数会丢失;
    **

    详解
    假设是通过params方式传参。我门先配置个路由简单点:

    路由配置页面

    
    
    • 1

    params

    1 link传参,路由跳转

    这种写法我通常是在表格中使用,因为通过row我们可以直接拿到选中行的 Id, 直接给link就好了。
    	
    	 {
    	    title: '工艺编码',
    	    dataIndex: 'techCode',
    	    align: 'center',
    	    render: (value, record) => {
    	      const { id } = record || {}; // recoed 就是选中行的信息 ,在这里解构赋值id ,直接拼接给跳转的路由就OK
    	      return {value};
    	    }
    	    // 或者 详情 
    	    // 或者 {pathname: '/Capacity/manage/craft/view/' + '121212'}}>跳转
    	  },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    页面的接收,直接在钩子函数中进行接收验证。
    在这里插入图片描述
    当然你在验证时候肯定是要自己state一个id值的,去承接设置新的值

     async componentDidMount() { 
        this.setState({
          id: this.props?.match?.params?.id
        });
        await this.findDeatil(this.state.id); // 拿到这个id 去调取详情、编辑或者其他接口就好了。
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2 使用js传参,

    this.props.router.push({
    	pathname: '/Capacity/manage/craft/view/' + '12121'
    });
    或者
    this.props.router.push(
    	'/Capacity/manage/craft/view/'+'105'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在另一个页面获取参数

    this.props.match.params.id
    
    • 1

    当我们params 传递多个参数的时候

    路由页面

    
    
    • 1

    j假设页面中的配置是这样的

    state = {
         productionId: 120,
         productionType: 'fruits'
     }
    
    • 1
    • 2
    • 3
    • 4

    使用Link传参

    {
    	pathname:
    	`/production/${this.state.productionId}/${this.state.productionType}`
    }}>跳转
    
    • 1
    • 2
    • 3
    • 4

    使用js传参

    this.props.router.push({
    	pathname:
    		`/demo/${this.state.productionId}/${this.state.productionType}`
    });
    
    • 1
    • 2
    • 3
    • 4

    获取参数

    this.props.match.params
    
    • 1

    query 传参

    路由页面(无需配置)

    
    
    • 1

    使用Link传参

    {pathname:'/production',query:{productionId:120,productionType:'fruits'}}}>跳转
    
    • 1

    使用js传参

    this.props.router.push({pathname:'/production',query:{productionId:120,productionType:'fruits'}});
    
    • 1

    参数获取

    this.props.location.query
    
    • 1

    三,state 这也常用 刷新页面后参数不消失 参数不会在地址栏显示

    路由页面(无需配置)

    
    
    • 1

    使用Link传参

    {
    	pathname:
    		'/production',
    		state:{
    			productionId:12,
    			productionType:'fruits'
    		}
    	}}>跳转
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用js传参

    this.props.router.push({
    	pathname:
    	 '/production',
    	 state:{
    	 	productionId:12,
    	 	productionType:'fruits'
    	 }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获取参数

    this.props.location.state

    或者你这样搞

     handleview = ({ selectedRows }) => {
        let row = selectedRows[0];
        console.log(row);
        // 去采购订单页面 传选中行的itemId
        this.props.push({
          pathname: `/purc/purcorder/index`,
          state: { // 这里可以接收你传的任何方式,可以是对象,可以是数组。注意的是接受的页面记得处理你的数组或者对象,要保持一致。
            itemIds: [
              {
                id: row.itemId,
                itemCode: row.itemCode,
                itemName: row.itemName
              }
            ]
          }
        });
      };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    四 .search

    路由页面

    
    
    • 1

    设置页面

    xxx
    	或者
    this.props.history.push({pathname:"/web/departManange?tenantId" + row.tenantId});
    
    • 1
    • 2
    • 3

    读取参数用: this.props.location.search

  • 相关阅读:
    简单的卷积神经网络编程,卷积神经网络算法代码
    Servlet学习(八):Session
    Qt 之悬浮球菜单
    rosdep init 错误解决终极方法(药到病除)
    cms系统稳定性压力测试出现TPS抖动和毛刺的性能bug【杭州多测师_王sir】
    计算机网络五 传输层
    15.前端笔记-CSS-学成在线案例
    Vue中如何进行分布式任务调度与定时任务管理
    MySQL——数据库基础
    python+ipc+改造过的插线板写一个控制ipc疯狂上下电的脚本
  • 原文地址:https://blog.csdn.net/lzfengquan/article/details/126596657