<Link to='/cats/info/'>
{cat.catId}--{cat.catName}
</Link>
<Routes>
<Route path='info' element={<CatInfo/>} />
</Routes>
import React from "react";
import CatInfo from "./Info/CatInfo";
import {Route,Routes,Link} from 'react-router-dom'
class Cats extends React.Component{
state = {
cats:[
{catId:'A1001',catName:'点点'},
{catId:'A1002',catName:'阿苔'},
{catId:'A1003',catName:'花花'}
]
};
render(){
const {cats} = this.state;
return(
<div>
<h2>猫咪信息</h2>
<ul>
{
cats.map((cat)=>{
return(
<li key={cat.catId}>
{/* 编写路由链接 */}
<Link to={`/cats/info/${cat.catId}`}>
{cat.catId}--{cat.catName}
</Link>
</li>
)
})
}
</ul>
<br /><br />
<Routes>
{/* 注册路由 */}
<Route path='info/:catId' element={<CatInfo/>} />
</Routes>
</div>
)
}
}
export default Cats;
import React from "react";
import { useParams } from "react-router-dom";
import './catInfo.css'
//数据备用 根据传来的catId 查找要展示的数据
let catList = [
{catId:'A1001',catName:'点点',catAge:5,catKind:'德文'},
{catId:'A1002',catName:'阿苔',catAge:6,catKind:'德文'},
{catId:'A1003',catName:'花花',catAge:2,catKind:'布偶'}
]
export default function CatInfo(){
const {catId} = useParams();//获取路由传递来的参数
// 根据传递过来的catId 查找对应的数据
const cat = catList.find((obj)=>{
return obj.catId === catId;
})
return(
<div>
<hr />
<table>
<caption>猫咪信息</caption>
<thead>
<tr>
<th>编号</th><th>姓名</th><th>年龄</th><th>品种</th>
</tr>
</thead>
<tbody >
<tr>
<td>{cat.catId}</td>
<td>{cat.catName}</td>
<td>{cat.catAge}</td>
<td>{cat.catKind}</td>
</tr>
</tbody>
</table>
</div>
)
}
传参数与上一致,如下:
<li key={cat.catId}>
{/* 编写路由链接 */}
<Link to={`/cats/info/${cat.catId}/${cat.catName}`}>
{cat.catId}--{cat.catName}
</Link>
</li>
<Routes>
{/* 注册路由 */}
<Route path='info/:catId/:catName' element={<CatInfo/>} />
</Routes>
取参数如下:
import { useMatch } from "react-router-dom";
const data = useMatch('/cats/info/:catId/:catName');
console.log(data);
const {params} = useMatch('/cats/info/:catId/:catName');
console.log(params.catName);
效果如下:
读取
和修改
当前位置 URL 中的查询字符串。问号
拼接 到地址后面。import React from "react";
import CatInfo from "./Info/CatInfo";
import {Route,Routes,Link} from 'react-router-dom'
class Cats extends React.Component{
state = {
cats:[
{catId:'A1001',catName:'点点'},
{catId:'A1002',catName:'阿苔'},
{catId:'A1003',catName:'花花'}
]
};
render(){
const {cats} = this.state;
return(
<div>
<h2>猫咪信息</h2>
<ul>
{
cats.map((cat)=>{
return(
<li key={cat.catId}>
{/* 编写路由链接 */}
<Link to={`/cats/info?catId=${cat.catId}&catName=${cat.catName}`}>
{cat.catId}--{cat.catName}
</Link>
</li>
)
})
}
</ul>
<br /><br />
<Routes>
{/* 注册路由 */}
<Route path='info/' element={<CatInfo/>} />
</Routes>
</div>
)
}
}
export default Cats;
import React from "react";
// import { useParams } from "react-router-dom";
import { useSearchParams } from "react-router-dom";
import './catInfo.css'
//数据备用 根据传来的catId 查找要展示的数据
let catList = [
{catId:'A1001',catName:'点点',catAge:5,catKind:'德文'},
{catId:'A1002',catName:'阿苔',catAge:6,catKind:'德文'},
{catId:'A1003',catName:'花花',catAge:2,catKind:'布偶'}
]
export default function CatInfo(){
// const {catId} = useParams();//获取路由传递来的参数
let [searchParams, setSearchParams] = useSearchParams();// 获取问号传递来的参数
// console.log(searchParams);
const catId = searchParams.get('catId'); //取参数通过 searchParams.get('key')
const catName = searchParams.get('catName');
console.log(catId,'---->',catName);
// 根据传递过来的catId 查找对应的数据
const cat = catList.find((obj)=>{
return obj.catId === catId;
})
return(
<div>
<hr />
<table>
<caption>猫咪信息</caption>
<thead>
<tr>
<th>编号</th><th>姓名</th><th>年龄</th><th>品种</th>
</tr>
</thead>
<tbody >
<tr>
<td>{cat.catId}</td>
<td>{cat.catName}</td>
<td>{cat.catAge}</td>
<td>{cat.catKind}</td>
</tr>
</tbody>
</table>
</div>
)
}
代码如下:
import { useLocation } from "react-router-dom";
console.log("======使用useLocation======");
const data = useLocation();
console.log(data);
效果如下:
npm i query-string
import queryString from "query-string"
const data = useLocation();
console.log(data);
const dataObj = queryString.parse(data.search); //转对象
console.log(dataObj);
console.log("======obj转location======");
const locationStr = queryString.stringify(dataObj);
console.log(locationStr);
<li key={cat.catId}>
{/* 编写路由链接 */}
{/* 传递state参数 */}
<Link to="/cats/info" state={{catId:cat.catId,catName:cat.catName}}>
{cat.catId}--{cat.catName}
</Link>
</li>
<Routes>
{/* 注册路由 */}
<Route path='info/' element={<CatInfo/>} />
</Routes>
如下:
import { useLocation } from "react-router-dom";
const data = useLocation();
let catId = data.state.catId;
取参方式,如下
useParams钩子
<Link to={`/cats/info/${cat.catId}`}>
{cat.catId}--{cat.catName}
</Link>
<Routes>
{/* 注册路由 */}
<Route path='info/:catId' element={<CatInfo/>} />
</Routes>
import { useParams } from "react-router-dom";
const {catId} = useParams();//获取路由传递来的参数
useMatch钩子
<Link to={`/cats/info/${cat.catId}/${cat.catName}`}>
{cat.catId}--{cat.catName}
</Link>
<Routes>
{/* 注册路由 */}
<Route path='info/:catId/:catName' element={<CatInfo/>} />
</Routes>
import { useMatch } from "react-router-dom";
const {params} = useMatch('/cats/info/:catId/:catName');
console.log(params.catName);
取参方式,如下
<Link to={`/cats/info?catId=${cat.catId}&catName=${cat.catName}`}>
{cat.catId}--{cat.catName}
</Link>
<Routes>
{/* 注册路由 */}
<Route path='info/' element={<CatInfo/>} />
</Routes>
import { useSearchParams } from "react-router-dom";
let [searchParams, setSearchParams] = useSearchParams();// 获取问号传递来的参数
// console.log(searchParams);
const catId = searchParams.get('catId'); //取参数通过 searchParams.get('key')
const catName = searchParams.get('catName');
import { useLocation } from "react-router-dom";
import queryString from "query-string"
const data = useLocation();
console.log(data);
const dataObj = queryString.parse(data.search); //转对象
console.log(dataObj);
取参方式,如下
{/* 传递state参数 */}
<Link to="/cats/info" state={{catId:cat.catId,catName:cat.catName}}>
{cat.catId}--{cat.catName}
</Link>
<Routes>
{/* 注册路由 */}
<Route path='info/' element={<CatInfo/>} />
</Routes>
import { useLocation } from "react-router-dom";
const data = useLocation();
let catId = data.state.catId;