在前后端分离架构的背景下,前端已经逐渐代替后端接管了所有固定路由的判断与处理,但在动态路由这样一个场景下,我们会发现单纯前端路由服务的灵活度是远远不够的。在用户到达某个页面后,可供下一步逻辑判断的依据就只有当前页面的 url,而根据 url 后端的路由服务是可以返回非常丰富的数据的。
常见的例子如页面的类型。假设应用中营销页和互动页的渲染逻辑并不相同,那么在页面的 DSL 数据之外,我们就还需要获取到页面的类型以进行相应的渲染。再比如页面的 SEO 数据,创建和更新时间等等,这些数据都对应用能够在前端灵活地展示页面,处理业务逻辑有着巨大的帮助。
甚至我们还可以推而广之,彻底抛弃掉由 react-router 等提供的前端路由服务,转而写一套自己的路由分发器,即根据页面类型的不同分别调用不同的页面渲染服务,以多种类型页面的方式来组成一个完整的前端应用。
七、组合式开发为了解决大而全的方案在实践中不够灵活的问题,我们是不是可以将其中包含的各个模块解耦后,独立发布出来供开发者们按需取用呢?让我们先来看一段理想中完整的企业管理系统应用架构部分的伪代码:
const App = props => ( <Provider> // react-redux bind <ConnectedRouter> // react-router-redux bind <MultiIntlProvider> // intl support <AclRouter> // router with access control list <Route path="/login"> // route that doesn't need authentication <NormalLayout> // layout component <View /> // page content (view component) </NormalLayout> <Route path="/login"> ... // more routes that don't need authentication <Route path="/analysis"> // route that needs authentication <LoginChecker> // hoc for user login check <BasicLayout> // layout component <SiderMenu /> // sider menu <Content> <PageHeader /> // page header <View /> // page content (view component) <PageFooter /> // page footer </Content> </BasicLayout> </LoginChecker> </Route> ... // more routes that need authentication <Route render={() => <div>404</div>} /> // 404 page </AclRouter> </MultiIntlProvider> </ConnectedRouter> </Provider> );
在上面的这段伪代码中,我们抽象出了多语言支持、基于路由的权限管理、登录鉴权、基础布局、侧边栏菜单等多个独立模块,可以根据需求添加或删除任意一个模块,而且添加或删除任意一个模块都不会对应用的其他部分产生不可接受的副作用。这让我们对接下来要做的事情有了一个大体的认识,但在具体的实践中,如 props 如何传递、模块之间如何共享数据、如何灵活地让用户自定义某些特殊逻辑等都仍然面临着巨大的挑战。我们需要时刻注意,在处理一个具体问题时哪些部分应当放在某个独立模块内部去处理,哪些部分应当暴露出接口供使用者自定义,模块与模块之间如何做到零耦合以至于使用者可以随意插拔任意一个模块去适应当前项目的需要。
八、学习路线从一个具体的前端应用直接切入开发技巧与理念的讲解,所以对于刚入门 React 的朋友来说可能存在着一定的基础知识部分梳理的缺失,这里为大家提供一份较为详细的 React 开发者学习路线图,希望能够为刚入门 React 的朋友提供一条规范且便捷的学习之路。
总结到此react的路由鉴权映梳理完了欢迎大家转发交流分享 转载请注明出处 ,附带一个近期相关项目案例代码给大家一个思路: