react-router 提供了路由核心 api。如 Router, Route, Switch 等,但没有提供有关 dom 操作进行路由跳转的 api。
react-router-dom 提供了 BrowserRouter、Route、Link 等 api,可以通过 dom 操作触发事件控制路由。
react-router-dom 中依赖了 react-router,所以安装的时候只要安装 react-router-dom。
安装
npm install react-router-dom --save
如果安装版本在 >=6, Switch -->Routes
v5 版本的文档: https://v5.reactrouter.com/web/guides/quick-start
v6 git 地址: https://github.com/remix-run/react-router
import { BrowserRouter } from "react-router-dom";
root.render(
);
import { Routes, Route, Outlet, Link } from "react-router-dom";
// 其中 Routes 相当于v5的 Switch ,Outlet嵌套路由,index 配置默认首页路由
}>
}>
} />
以上是基本路由配置
3. 页面中匹配子路由
修改 app.js中的路由配置,新增tabs,在tabs页面中新增两个子路由tabOne,tabTwo
注:tabs路由配置path=“/tabs/*”,一定加 *,否则无法匹配到子路由
}>
}>
}>
} />
tabs 页面配置,默认展示tabOne页面
const Tab = function () {
return (
}>
}>
)
}
// 因为 添加的是 tabs/* 所以 }> path的/不能省略
3.1 嵌套路由,见github 中example/basic/src/App.tsx
以下为完整代码
app.jsx
function App () {
// 整体接口 左边是菜单,右边是详细的针对布局
return (
}>
}>
{/* 根据下面自己路由进行 切换 */}
}>
} />
);
}
其中 Route 中 index 为默认渲染页面,tabs/*代码下面有子路由
tabs页面
import tabs from "@/style/tab.module.scss"
import OneTabChild from './tabChilds/one'
import TwoTabChild from './tabChilds/two'
import { Route, Routes, Link, Outlet } from "react-router-dom"
const Tab = function () {
return (
}>
{/* 嵌套路由使用方法 */}
}>
}
/>
} />
)
}
function TabOne () {
return 这是tabOne
}
function TabTwo () {
return (
这是tabTwo
{/* 这是渲染嵌套路由的例子 */}
)
}
export default Tab