了解SAP和路由的概念
SAP(single page web application)的意思是单页Web应用,正如前言所说,一般来说功能较为复杂都会涉及到页面跳转的功能,而传统的前端页面跳转往往是利用<a/>标签进行跳转,这种方式虽然可以实现功能,但是每次跳转到新的页面都会重新对页面的元素进行加载,这样其实对于用户来说是不太友好的。而单页Web应用则较好的解决了这个问题,因为SAP整个应用都是在一个页面上进行的,每次的页面跳转只涉及到页面中对应组件(模块)的更新操作,这样就在一定程度上让页面不需要加载重复的页面元素。
再说说路由
路由其实可以理解为是一个映射关系,即路径到组件或者函数的对应关系,比如说/home这个路径对应着Home这个首页组件,在React中,有react-router-dom这个官方维护的组件库来帮助我们处理项目中的路由问题,需要注意的是,我们用create-react-dom创建的react项目,默认是没有react-router-dom的,所以需要我们自己再额外下载到项目中。
路由封装流程
- 封装路由的文件组件 ,针对一级路由的封装操作,单独路由文件抽离出单独的文件中去
- src中新建一个router文件夹,在文件夹新建index.js文件,路由配置文件迁移过去
- router文件夹中新建mapRouter文件,路由配置转换成数组对象格式,参考Vue配置
- index.js循环Route组件即可,二级路由配置先暂时在父组件中配置即可
注:文件夹的名称和文件的名字可以随便定义,无需完全按照上方流程来
index.js
import { default as React } from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import reportWebVitals from './reportWebVitals'; import {Routes} from '../src//router/index' const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <Routes/> ); reportWebVitals();
router/index.js
//router/index.js文件 import { HashRouter as Router, Route, Switch } from "react-router-dom" import routes from './mapRoute'; //定义的路由函数直接挂载到主页面上去 const Routes = function () { console.log(routes); return ( <Router> <Switch> { routes.map((item,index)=>{ return ( <Route key={index} path={item.path} component={item.component}></Route> ) }) } </Switch> </Router> ) } export default Routes;
HashRouter as Router,这是给HashRouter起的别名,可以不写
router/mapRoute.js路由配置文件
import App from '../App'; import Detail from '../detail'; import Layout from "../admin/layout" import About from '../pages/About'; const routes = [ { path:"/about", title:"About", component:About, }, { path:"/admin", title:"管理后台", component:Layout, exact:false, },{ path:"/detail/:id", title:"detail", component:Detail, },{ path:"/", title:"App", component:App, } ] export default routes;
这样我们react中的路由就封装好了,他的原理是跟我们vue中的路由一样,把路由封装到一个文件中,然后我们就可以直接在这个里面添加路由,不同的是,vue中有一个children属性用来定义二级路由,而react中没有
我们在这个js文件中引入路由,然后在index文件中进行循环渲染,同时也减少了我们的代码量
不过需要注意的是,我们在react路由封装中不能使用二级路由,这是一个弊端,我们可以将二级路由定义在父组件中定义
到此这篇关于React路由封装的实现浅析的文章就介绍到这了,更多相关React路由封装内容请搜索阿兔在线工具以前的文章或继续浏览下面的相关文章希望大家以后多多支持阿兔在线工具!