路由配置最佳实践

路由是组织起一个复杂应用的关键骨架,复杂应用由许多页面组件和功能组件组成,JUI使用组件化独立分治的架构模式,页面组件由若干功能组件或者子页面组件组成,页面组件和路由的结合实现界面的跳转。

组件路由的基本结构

父组件
├── pages
│   ├── page1 #页面组件1
│   │   └── index.js
│   └── page2 #页面组件2
│       └── index.js 
├── index.js #父组件入口
└── routes.js #父组件 路由配置

组件路由的配置

1、建立路由配置文件

// 父组件 routes.js
import Loadable from '@/components/loadable' //懒加载组件

const page1 = Loadable(() => import('./pages/page1')) //子 页面组件1
const page2 = Loadable(() => import('./pages/page2')) //子 页面组件2

export default [
  { path: '/demo/page1', component: page1 },
  { path: '/demo/page2', component: page2 }
]

参数:

  • path 可以是 path-to-regexp 能够理解的任何有效的 URL 路径。
  • component 只有当位置匹配时才会渲染的 React 组件。
  • exact 如果为 true,则只有在 path 完全匹配 location.pathname 时才匹配。

2、在组件入口渲染路由

// 父组件入口 index.js
import React, { Component, Fragment } from 'react'
import { Redirect, Route, Switch } from 'react-router-dom';
import routes from './routes' //引入路由配置的 routes.js 文件

export default class DemoComponent extends Component {
  render() {
    return (
      <Fragment>
        <Switch>
          {routes.map((route, idx) => {
            return route.component ? (
              <Route
                key={idx}
                path={route.path}
                exact={route.exact}
                name={route.name}
                render={props => (
                  <route.component {...props} />
                )} />
            ) : (null);
          })}
        </Switch>
      </Fragment>
    )
  }
}

render 属性接收所有相同的 route props 的 component 渲染属性。