路由组件化
单页面应用是由一个个组件搭建而成的,如下图,它的结构通常是一棵树,理论上而言,在外部数据进来,组件可以进行逻辑变更,是否显示或者隐藏在界面上,这就不需要浏览器的前进、回退和刷新功能,那为什么还需要路由呢?可想而知组件搭建的页面是建立在一棵组件树的“根”开始的,而现实很多情况是需要只看“电影”中的“某一帧”,或者从“某一帧”开始看,这不得不需要一个“时刻”的导航,“某个时刻“在这里意味着我们单页面应用的路由。这也是我们为什么需要路由的原因。
路由是链接和页面的映射,监听链接然后将监听事件回调给各个组件树节点上的容器组件,容器组件内部的业务逻辑来进行具体的业务组件切换,这是路由组件化的基本原理。但换一个角度看,从数据流的角度来看,从全局状态来看,链接和其他全局的东西似乎可以统一,链接的变动是一个脱离组件树的全局状态,数据流的传递可以通过单向数据流(Flux架构/Redux架构)传递给容器组件(vue-router就是这样做的)。很惊讶,路由管理和状态管理竟然统一了,路由管理工具只是单纯的将链接变更的动作为全局状态而已,一些路由的push和replace只是Flux架构下的dispatcher而已。
基本原理一致,路由组件化也是各路由工具的实现出现较大差异的根本原因,因为组件的通信机制和响应式机制的不同,因此路由管理又不