react项目鉴权怎么办?路由跳转没有回调怎么办?路由懒加载怎么办?接下来逐个分析分析一下。前端
一个实用的路由模块应该至少包括如下几个功能vue
先来看一下定义,要知足以上要求,这个类至少由如下几个部分组成。react
接下来看各个功能点分析webpack
按路由进行代码分割而后按需加载,适合大多数优化场景,并且这种方式与业务代码彻底解耦,虽然有时分割得比较粗糙,但确实是一把梭的普适方案。不过要实现打包后的代码分割至少须要打包工具的支持,幸运的是webpack根据es规范实现相关的APIimport(),import()返回一个Promise,完成加载后回调。web
如今是在封装react-router,咱们还须要@
babel/plugin-syntax-dynamic-import这个插件在由babel解析成的AST中识别出import()相关的语法。vue-router
ok,思路有了,咱们能够这样去配置路由,这样当咱们解析配置拿到component时,才去调用import,来达到按路由分割的效果。浏览器
其实这个过程就是对传入的component进行一层包装,而后在调用component的各个阶段,回调提早埋下的生命周期钩子函数。babel
好比像BeforeEnter和Mounted这两个生命周期就能够像这样埋下对应的钩子react-router
不少时候,好比鉴权,进入页面前必要的初始化操做,都是异步的行为,而且异步行为结束前不容许页面加载出来。dom
这也很好解决,使用async await便可
使用的时候也很方便,像须要处理异步操做的时候,返回一个Promise就行。嫌麻烦的话也能够封装成vue-router那样,在参数位置给你一个next()去作一下回调。
过场动画的设置与生命周期差很少,只须要在开始加载路由组件时去设置显示,加载完成时设置隐藏便可。
ok,接下来看看这个包装函数是怎么写的
核心内容其实就这么多了,配置读取处理的过程还有类型的声明可看的完整代码,源码是用ts编写的。
由配置与渲染两个部分组成,简单易用。
不会吧不会吧,就是一句话加一张图就能够讲完的事情。
前端路由的核心思路就是经过对浏览器跳转相关的事件作一个代理,匹配到对应路由以后替换dom节点,来完成路由的切换。
至此,前端路由已经没有什么神秘的地方了,在不一样的时间节点回调各类奇奇怪怪的生命周期都没问题。