React
很久没写 react 了,前几天想做个低代码的平台又重温了一下
React-route
简介
在 react 中有几种路由例如:
react-router-dom
、react-router-native
等,dom
运行在浏览器中,native
运行在客户端中。在 v6 版本中路由的声明有了不同的方法,路由(Route)必须包含在路由器(Router)中,其中有
HashRouter
、BrowserRouter
以及MemoryRouter
等几种路由器。
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
function App() {
return (
<Router>
<Routes>
<Route path="/home" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
export default App;
嵌套路由
上述的示例展示的是非嵌套路由的使用方式,在使用嵌套路由时例如/home/pic
上述的路由就无能为力了,此时我们需要在<Route />
组件内部再添加一个<Route />
组件,如下:
import { BrowserRouter as Router, Routes, Route, Outlet } from 'react-router-dom';
function App() {
return (
<Router>
<Routes>
<Route path="/home" element={<Home />}>
<Route path="pic" element={<Pic />} />
</Route>
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
function Home() {
return (
<>
<span>hello </span>
<Outlet />
<span>world </span>
</>
);
}
function Pic() {
return <span>你好</span>;
}
export default App;
其中,我们在路由组件内部又声明了一个路由pic
, 该组件渲染了<Pic />
组件,因此当我们的路由为/home/pic
时,页面会展示:hello你好world
,当路由为/home
时,只会展示helloworld
,我们还在父组件中使用了<Outlet/>
组件,该组件是个占位符,它会将我们的子组件放在该位置,类似于Vue
中的<router-view />
组件
路由导航
在 react-router-rom
中我们使用useNavigate
进行路由导航,t 通过useLocation
获取路由上的信息
import { useLocation, useNavigate } from 'react-router-dom';
function App() {
const navigate = useNavigate();
const loc = useLocation();
console.log(loc);
setTimout(() => navigate('/home'));
}
路由配置
我们可以将路由的配置信息抽取出来,使用useRoutes
来将配置渲染成组件,示例如下:
import {useRoutes} from "react-router-dom"
const routes = [
{ path: '/home', element: <Home /> },
{
path: '/about',
element: <About />,
children: [
path: 'profile',
element: <Profile/>
]
},
];
const App:FC<Props> = props=> {
return <Layout>
{useRoutes(routes)}
</Layout>
}