npm install react-router-dom
复制代码
因为之前用过Vue的router,所以在学习react的router的话我会将vue和react之间router进行一个区别,比较。从而更好的入门router。 \
既然要做对比,那么我们得先知道,vue的router有什么?才能更好的对比。
vue的路由是在app.vue中使用router-view组件来显示,跳转路由使用api或者router-link组件。
两方面:1. 编写一个router-view父组件,里面需要有router-view组件显示路由页面,可以写其他div编写框架。2. 在router.js中进行一个嵌套路由,父级layout使用该组件
实现:
<template>
<div class="viewIndexPage">
<div>头部</div>
<router-view />
<div>底部</div>
</div>
</template>
复制代码
[{
path: '/path',
name: 'Path',
component: Fun,//* 刚才编写的父组件页面
children: [
{
path: 'com',
name: 'Com',
component: Com,//* 子组件
}
]
},
]
复制代码
const createRouter = () => new Router({
routes: constantRoutes //* 上面的路由数组 通过该方式引入
})
复制代码
总结: 大概看了一些vue的router实现方式和layout和实现方式,那么接下来我们来看下react如果要实现该怎么操作?
刚才实现了vue的router,一共有下面几个方面
现在src下面创建router文件夹,再创建/src/router/router.config.js 和 /src/router/index.js 文件 \
import { lazy } from "react"; //* lazy组件用于实现懒加载 只有在用到这个路由再加载
const HomeLayout = lazy(() => import(/* webpackChunkName: "HomeLayout" */"../layout/index"))
export const rootRouter = [ //* 路由数组
{
component: HomeLayout,
path: '/home',
name: '布局'
},
]
export const homeRouter = [
]
复制代码
import { Suspense } from 'react';
import { HashRouter as Router, Switch, Route } from 'react-router-dom'
import { rootRouter } from './router.config'
const RouterFun = () => {
return (
<Router>
{/* 使用lazy异步加载组件后,需要配合使用Suspense组件包裹。fallback可以为loading,为异步包裹的内容 */}
<Suspense fallback={ <div></div> }>
{/* 需要该组件路由才能显示 */}
<Switch>
{
//* 循环路由数组,创建Route属性用于显示 path,显示的路径 component 显示哪个页面
rootRouter.map((route,i) =>
<Route key={route.path || i} path={ route.path } component={ route.component }></Route>
)
}
</Switch>
</Suspense>
</Router>
)
}
export default RouterFun
复制代码
App.js
import Router from './router/index' //* 使用路由组件
function App() {
return (
<Provider store={store} className="App">
<Router />
</Provider>
);
}
export default App;
复制代码
引入方式不同,vue是直接在对象中引入路由数组,react则是通过Switch组件,在里面循环Route组件创建
先创建几个测试页面 Index.js/User.js
const Index = () => {
return (<div>
首页
</div>);
}
export default Index;
复制代码
在router.config.js中引入 重新创建一个router数组
import { lazy } from "react";
export const rootRouter = [
// {
// component: lazy(() => import(/* webpackChunkName: "Index" */"../pages/index")),
// path: '/',
// name: 'Index'
// },
{
component: lazy(() => import(/* webpackChunkName: "HomeLayout" */"../layout/index")),
path: '/',
name: 'Layout'
},
]
export const homeRouter = [
{
component: lazy(() => import(/* webpackChunkName: "Index" */"../pages/home/index")),
path: '/home/index',
name: '首页'
},{
component: lazy(() => import(/* webpackChunkName: "User" */"../pages/home/user/index")),
path: '/home/user',
name: '用户中心'
},
]
复制代码
创建一个layout文件夹,里面创建一个index.jsx
import { homeRouter } from "../router/router.config";
import { Suspense } from 'react';
import { NavLink, Switch, Route } from "react-router-dom";
const LayoutIndex = () => {
return (
<div className="layout-index">
<Suspense fallback={<div></div>}>
{homeRouter.map((route) => (
<NavLink to={route.path}>{route.path} <br/></NavLink>
))}
<Switch>
{homeRouter.map((route, i) => (
<Route
key={route.path || i}
path={route.path}
component={route.component}
></Route>
))}
</Switch>
</Suspense>
</div>
);
};
export default LayoutIndex;
复制代码
在页面访问即可进入 思路
重新创建一个路由数组,在layout中引入,创建router组件。值得注意的是,react是通过url来找layout的
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有