用react-router-dom v6来回答
时间: 2023-08-15 10:20:33 浏览: 101
好的,以下是使用 `react-router-dom` v6 的示例来动态增删改路由:
```javascript
import React from 'react';
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
const App = () => {
const [routes, setRoutes] = React.useState([
{ id: 1, path: '/route/1', element: <Route1 /> },
{ id: 2, path: '/route/2', element: <Route2 /> },
]);
const addRoute = () => {
const newRoute = {
id: routes.length + 1,
path: `/route/${routes.length + 1}`,
element: <h1>New Route {routes.length + 1}</h1>,
};
setRoutes([...routes, newRoute]);
};
const removeRoute = (id) => {
setRoutes(routes.filter((route) => route.id !== id));
};
const updateRoute = (id, path) => {
setRoutes(
routes.map((route) =>
route.id === id ? { ...route, path } : route
)
);
};
return (
<Router>
<div>
<nav>
<ul>
{routes.map((route) => (
<li key={route.id}>
<Link to={route.path}>Route {route.id}</Link>
<button onClick={() => removeRoute(route.id)}>X</button>
<button onClick={() => updateRoute(route.id, '/new-path')}>
Update
</button>
</li>
))}
</ul>
<button onClick={addRoute}>Add Route</button>
</nav>
<Routes>
{routes.map((route) => (
<Route key={route.id} path={route.path} element={route.element} />
))}
</Routes>
</div>
</Router>
);
};
const Route1 = () => {
return <h1>Route 1</h1>;
};
const Route2 = () => {
return <h1>Route 2</h1>;
};
export default App;
```
在 `react-router-dom` v6 中,我们使用 `<Routes>` 组件来定义路由,使用 `<Route>` 组件来定义每个具体的路由。在上面的代码中,我们使用 `useState` hook 来管理路由数组。然后,我们定义了三个函数:`addRoute`,`removeRoute` 和 `updateRoute`,分别用于添加、删除和更新路由。这些函数都会更新路由数组,并使用 `setRoutes` hook 来重新渲染应用程序。
在 `render` 方法中,我们首先渲染一个导航栏,其中包含一个用于添加新路由的按钮,以及每个路由的删除和更新按钮。然后,我们渲染一个 `<Routes>` 组件,其中包含每个路由的 `<Route>` 组件。
当用户点击“添加路由”按钮时,`addRoute` 函数会创建一个新的路由对象,并将其添加到路由数组中。当用户点击“删除”按钮时,`removeRoute` 函数会从路由数组中删除具有指定 ID 的路由。当用户点击“更新”按钮时,`updateRoute` 函数会更新具有指定 ID 的路由的路径。
最后,我们使用 `map` 函数将每个路由渲染为导航栏中的一个链接,并将每个路由渲染为 `<Route>` 组件。
这是一个简单的例子,演示了如何使用 `react-router-dom` v6 来动态增删改路由。你可以根据自己的需求进行修改和扩展。
阅读全文