基础的路由传参——params、search(query)、state

本文介绍了在React中使用三种方式传递参数到路由组件:通过params(路径参数)、search查询字符串和通过state(页面跳转时保持的状态)。详细展示了如何在链接、路由声明和子组件中实现这些参数的接收和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、params传参

路由链接携带参数:${item.id}/${item.content}

<li key={item.id}>
  {/* params传参直接写在路径后面,向路由组件传底params参数 */}
  <Link to={`/home/messages/detail/${item.id}/${item.content}`}>{item.content}</Link>
</li>

注册路由声明接收:/:id/:content

 {/* 注册路由 ,接收params参数;Detail组件props>math>params会收到传过去的参数*/}
 <Route path="/home/messages/detail/:id/:content" component={Detail}></Route>

子组件接收参数:

import React, { Component } from 'react'

export default class Detail extends Component {
    render() {
        const { match: { params } } = this.props;
        const DetailData = [
            { id: '01', DetailInfo: '详情一' },
            { id: '02', DetailInfo: '详情二' },
            { id: '03', DetailInfo: '详情三' },
            { id: '04', DetailInfo: '详情四' },
        ]
        const findId = DetailData.find(item => {
            return params.id === item.id
        });
        return (
            <div>
                <p>id:{params.id}</p>
                <p>title:{params.content}</p>
                <p>DetailInfo:{findId.DetailInfo}</p>
            </div>
        )
    }
}

2、search传参

路由携带参数:?id=${item.id}&title=${item.content}

{
  massageArr.map((item) => {
    return (
       <li key={item.id}>
       {/* search传参 */}
       <Link to={`/home/messages/detail/?id=${item.id}&title=${item.content}`}>{item.content}</Link>
       </li>
     )
   })
}

注册路由无需声明接收:

  <Route path="/home/messages/detail" component={Detail}></Route>

子组件接收参数:

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

export default class Detail extends Component {
    render() {
        const { location: { search } } = this.props;
        // qs字符串转成对象,然后取出参数
        const { id, title } = qs.parse(search.slice(1));
        const DetailData = [
            { id: '01', DetailInfo: '详情一' },
            { id: '02', DetailInfo: '详情二' },
            { id: '03', DetailInfo: '详情三' },
            { id: '04', DetailInfo: '详情四' },
        ]
        const findId = DetailData.find(item => {
            return id === item.id
        });
        return (
            <div>
                <p>id:{id}</p>
                <p>title:{title}</p>
                <p>DetailInfo:{findId.DetailInfo}</p>
            </div>
        )
    }
}

3、state传参

路由携带参数:

<li key={item.id}>
   {/* state传参 */}
   <Link to={{pathname:'/home/messages/detail',state:{id:item.id,title:item.content}}}>{item.content}</Link>
</li>

注册路由无需声明接收:

  <Route path="/home/messages/detail" component={Detail}></Route>

子组件接收参数:

const { id, title} = this.props.location.state;

注:HashRouter刷新后会导致state参数(前提不存)丢失

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值