6.react路由传参

params 传参

params 方式传参要求会多一些,需要我们在路由表配置的位置添加一个 参数占位。

路由表配置的位置添加参数占位

 {
        path:'/list',
        element:<LIST />,
		children: [
		    { path: 'details/:id/:title/:cont', element:<DETAILS /> }
		  ]
    },

路由传参

// App.js
import React, { useState } from 'react';
import {Link,Outlet} from 'react-router-dom'
function App() {
	const [messages] = useState([
		{id:'001',title:'消息1',cont:'锄禾日当午'},
		{id:'002',title:'消息2',cont:'汗滴禾下土'},
		{id:'003',title:'消息3',cont:'谁知盘中餐'},
		{id:'004',title:'消息4',cont:'粒粒皆辛苦'}
	]);
	return (
		<div>
			<ul>
				{
					messages.map((i)=>{
						return(
							<li key={i.id}>
								<Link to={`details/${i.id}/${i.title}/${i.cont}`}>{i.title}</Link>
							</li>
						)
					})
				}
			</ul>
			<hr/>
			<Outlet/>
		</div >
	);
}

export default App;

路由取参

在函数式组件里面我们要借助hooks的useParams来进行取参

import React from 'react';
import {useParams} from 'react-router-dom'

export default function Details() {
	const {id,title,cont} = useParams()
    return (
        <div>
            <ul>
				<li>消息编号:{id}</li>
				<li>消息标题:{title}</li>
				<li>消息内容:{cont}</li>
			</ul>
        </div>
    )
}


search传参

路由传参

// App.js
import React, { useState } from 'react';
import {Link,Outlet} from 'react-router-dom'
function App() {
	const [messages] = useState([
		{id:'001',title:'消息1',cont:'锄禾日当午'},
		{id:'002',title:'消息2',cont:'汗滴禾下土'},
		{id:'003',title:'消息3',cont:'谁知盘中餐'},
		{id:'004',title:'消息4',cont:'粒粒皆辛苦'}
	]);
	return (
		<div>
			<ul>
				{
					messages.map((i)=>{
						return(
							<li key={i.id}>
								<Link to={`details?id=${i.id}&title=${i.title}&cont=${i.cont}`}>{i.title}</Link>
							</li>
						)
					})
				}
			</ul>
			<hr/>
			<Outlet/>
		</div >
	);
}

export default App;

路由取参

在函数式组件里面我们要借助hooks的useSearchParams来进行取参

import React from 'react';
import {useSearchParams} from 'react-router-dom'
export default function Details() {
	const [search,setSearch] = useSearchParams()
	const id = search.get('id')
	const title = search.get('title')
	const cont = search.get('cont')
    return (
        <div>
            <ul>
				<li>消息编号:{id}</li>
				<li>消息标题:{title}</li>
				<li>消息内容:{cont}</li>
			</ul>
        </div>
    )
}

state传参

路由传参

// App.js
import React, { useState } from 'react';
import {Link,Outlet} from 'react-router-dom'
function App() {
	const [messages] = useState([
		{id:'001',title:'消息1',cont:'锄禾日当午'},
		{id:'002',title:'消息2',cont:'汗滴禾下土'},
		{id:'003',title:'消息3',cont:'谁知盘中餐'},
		{id:'004',title:'消息4',cont:'粒粒皆辛苦'}
	]);
	return (
		<div>
			<ul>
				{
					messages.map((i)=>{
						return(
							<li key={i.id}>
								<Link to={`details`} state={{id:i.id,title:i.title,cont:i.cont}}>{i.title}</Link>
							</li>
						)
					})
				}
			</ul>
			<hr/>
			<Outlet/>
		</div >
	);
}

export default App;

路由取参

在函数式组件里面我们要借助hooks的useLocation来进行取参

import React from 'react';
import {useLocation} from 'react-router-dom'
export default function Details() {
	let state = useLocation().state
    return (
        <div>
            <ul>
				<li>消息编号:{state.id}</li>
				<li>消息标题:{state.title}</li>
				<li>消息内容:{state.cont}</li>
			</ul>
        </div>
    )
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值