React Router 是 React 应用中用于管理路由的库。它允许你在不同的 URL 路径之间导航,并且可以在这些路径之间传递数据。
可以通过以下几种方式在 React Router 中发送数据:
useLocation
和 useNavigate
钩子在 React Router v6 中传递数据。import { BrowserRouter as Router, Route, Link, useParams } from 'react-router-dom';
function App() {
return (
<Router>
<div>
<Link to="/user/123">Go to User 123</Link>
<Route path="/user/:id" element={<User />} />
</div>
</Router>
);
}
function User() {
const { id } = useParams();
return <div>User ID: {id}</div>;
}
可以通过以下几种方式在 React Router 中接收数据:
useParams
钩子获取 URL 参数。useLocation
钩子获取路由状态。import { useParams } from 'react-router-dom';
function User() {
const { id } = useParams();
return <div>User ID: {id}</div>;
}
问题:如何在 React Router v6 中传递复杂数据?
原因:React Router v6 中不再支持 state
属性传递复杂数据。
解决方法:可以使用 useNavigate
钩子结合 URLSearchParams
或自定义查询参数来传递复杂数据。
useNavigate
传递复杂数据import { useNavigate } from 'react-router-dom';
function Home() {
const navigate = useNavigate();
const handleClick = () => {
const data = { name: 'John', age: 30 };
const params = new URLSearchParams(data).toString();
navigate(`/user?data=${params}`);
};
return (
<div>
<button onClick={handleClick}>Go to User</button>
</div>
);
}
function User() {
const location = useLocation();
const params = new URLSearchParams(location.search);
const data = params.get('data');
const parsedData = JSON.parse(decodeURIComponent(data));
return (
<div>
<div>Name: {parsedData.name}</div>
<div>Age: {parsedData.age}</div>
</div>
);
}
通过以上方法,你可以在 React Router 中方便地发送和接收数据,从而构建更加灵活和动态的单页应用。
领取专属 10元无门槛券
手把手带您无忧上云