我在这段代码中得到错误,而使用一个onclick函数路由在它我不明白如何修复它。
import React from "react";
import { Row, Col, Container, Button, ButtonGroup } from "react-bootstrap";
import { Routes, Route } from "react-router-dom";
import OrderList from "../components/Admin/Orderlist";
import Pizzaslist from "../components/Admin/Pizzaslist";
import Userlist from "../components/Admin/Userlist";
import AddNewPizza from "../components/Admin/AddNewPizza"
const AdminScreen = ({ history }) => {
return (
<>
<Container>
<Row>
<h1 className="text-center bg-dark text-light p-2">Admin Panel</h1>
<Col md={2}>
<ButtonGroup vertical style={{ minHeight: "400px" }}>
<Button onClick={() => history.push("/admin/userlist")}>
All Users
</Button>
<Button onClick={() => history.push("/admin/pizzalist")}>
All Pizzas
</Button>
<Button onClick={() => history.push("/admin/addnewpizza")}>
Add New Pizza
</Button>
<Button onClick={() => history.push("/admin/orderlist")}>
All Orders
</Button>
</ButtonGroup>
</Col>
<Col md={10}>
<Routes>
<Route path="/admin" component={Userlist} exact />
<Route path="/admin/userlist" component={Userlist} exact />
<Route path="/admin/pizzalist" component={Pizzaslist} exact />
<Route path="/admin/addnewpizza" component={AddNewPizza} exact />
<Route path="/admin/orderlist" component={OrderList} exact />
</Routes>
</Col>
</Row>
</Container>
</>
);
};
export default AdminScreen;
如果您使用的是Routes
组件,那么您使用的是react-router-dom@6
,这意味着没有history
对象可引用,没有history
作为prop传递给此AdminScreen
组件,并且Route
组件使用旧的v5 api,需要更新。
- 使用
useNavigate
钩子访问点击处理程序中使用的navigate
函数。 - 更新
Route
组件,将element
道具上的路由内容渲染为React.ReactNode
,例如JSX。
import React from "react";
import { Row, Col, Container, Button, ButtonGroup } from "react-bootstrap";
import {
Routes,
Route,
useNavigate // <-- import hook
} from "react-router-dom";
import OrderList from "../components/Admin/Orderlist";
import Pizzaslist from "../components/Admin/Pizzaslist";
import Userlist from "../components/Admin/Userlist";
import AddNewPizza from "../components/Admin/AddNewPizza";
const AdminScreen = () => {
const navigate = useNavigate(); // <-- call hook
return (
<Container>
<Row>
<h1 className="text-center bg-dark text-light p-2">Admin Panel</h1>
将history.push
替换为navigate
,以实现PUSH导航动作。
<Col md={2}>
<ButtonGroup vertical style={{ minHeight: "400px" }}>
<Button onClick={() => navigate("/admin/userlist")}>
All Users
</Button>
<Button onClick={() => navigate("/admin/pizzalist")}>
All Pizzas
</Button>
<Button onClick={() => navigate("/admin/addnewpizza")}>
Add New Pizza
</Button>
<Button onClick={() => navigate("/admin/orderlist")}>
All Orders
</Button>
</ButtonGroup>
</Col>
更新Route
组件以使用正确的道具
<Col md={10}>
<Routes>
<Route path="/admin" element={<Userlist />} />
<Route path="/admin/userlist" element={<Userlist />} />
<Route path="/admin/pizzalist" element={<Pizzaslist />} />
<Route path="/admin/addnewpizza" element={<AddNewPizza />} />
<Route path="/admin/orderlist" element={<OrderList />} />
</Routes>
</Col>
</Row>
</Container>
);
};
export default AdminScreen;