• 【react】 react---项目的-----------简单路由配置


     pages>index.js   (路由的懒加载)

     1 //路由的懒加载
     2 import Loadable from "react-loadable"
     3 import Loading from "../common/loading"
     4 
     5 const Home = Loadable({
     6     loader:()=>import("./home"),
     7     loading:Loading
     8 })
     9 
    10 const List = Loadable({
    11     loader:()=>import("./list"),
    12     loading:Loading
    13 })
    14 
    15 const Login = Loadable({
    16     loader:()=>import("./login"),
    17     loading:Loading
    18 })
    19 
    20 const Mine = Loadable({
    21     loader:()=>import("./mine"),
    22     loading:Loading
    23 })
    24 
    25 const Order = Loadable({
    26     loader:()=>import("./order"),
    27     loading:Loading
    28 })
    29 
    30 
    31 const INow = Loadable({
    32     loader:()=>import("../components/iNow"),
    33     loading:Loading
    34 })
    35 
    36 
    37 const Comming = Loadable({
    38     loader:()=>import("../components/comming"),
    39     loading:Loading
    40 })
    41 
    42 
    43 export {
    44     Home,
    45     List,
    46     Login,
    47     Mine,
    48     Order,
    49     INow,
    50     Comming
    51 }

    router》index.js   路由的配置表

    import {
        Home,
        List,
        Login,
        Mine,
        Order,
        INow,
        Comming
    } from "../pages"
    
    
    
    //路由配置表
    
    //tabBar 的路由数组
    export const TabBarRoutes = [  
        {
            id:1,
            path:"/home",
            icon:"ue717",
            name:"首页",
            component:Home,
            meta:{
                auth:false
            },
            children:[  //二级路由
                {
                    path:"/home/iNow",
                    component:INow,
                    name:"正在热映",
                },
                {
                    path:"/home/comming",
                    component:Comming,
                    name:"即将上映",
                }
            ]
        },
        {
            key:2,
            path:"/list",
            icon:"ue61d",
            name:"列表",
            component:List,
            meta:{
                auth:false
            }
        },
        {
            key:3,
            path:"/order",
            icon:"ue605",
            name:"订单",
            component:Order,
            meta:{
                auth:true
            }
        },
        {
            key:4,
            path:"/mine",
            icon:"ue613",
            name:"我的",
            component:Mine,
            meta:{
                auth:true
            }
        }
    ]
    
    //没有tabBar的路由数组
    export const NoTabBarRoutes = [
        {
            key:5,
            path:"/login",
            icon:"",
            name:"登陆",
            component:Login,
        }
    ]
    
    //数组的拼接,导出
    //baseRoutes  是数组对象[{},{},{}]
    export const baseRoutes = TabBarRoutes.concat(NoTabBarRoutes)

     

     

     

     

     封装的方法解析,

    utils>routerEach.js  //代码解析,  函数套函数,子函数执行来自 item 

     

    utils>routerEach.js  代码:

     1 import React, { Fragment } from "react";   //jsx语法
     2 import { Route, Redirect, Switch } from "react-router-dom";  //用到路由的
     3 //一个函数,通过入与出   达到渲染的目的
     4 export default (routes) => {  //传入的是一个数组对象,每一个对象都是一个路由的配置项
     5     //专门用来遍历子路由 //可以说二级路由的...
     6                                     let routeEach = (item) => {  
     7                                         return <Route path={item.path}  render={() => {  //item.path 是路径,return返回的是一个jsx
     8                                             return (
     9                                                 <Fragment>  //  Fragment, 是react的内置组件,不会渲染,因为return返回的是一个jsx 对象
    10                                                     <Route component={item.component} /> //这样是匹配任意,渲染任意
    11                                                     <Redirect from={item.path} to={item.children[0].path} />//路由的重定向
    12                                                     <Switch>  //作用是只匹配一个路由
    13                                                         {  //子路由的遍历
    14                                                             item.children.map((child, index) => {//child是每个元素的意思,index,数组下标
    15                                                                 if (child.children) {  //这个的意思是,判断子路由下面还会不会有路由,
    16                                                                     return routeEach(child)  //把这个子路由返回传入进入,,再次遍历执行渲染
    17                                                                 } else {  //如果没有
    18                                                                     return <Route path={child.path} key={index} component={child.component} />
    19                                                                 }
    20                                                             })
    21                                                         }
    22                                                     </Switch>
    23                                                 </Fragment>
    24                                             )
    25                                         }} />
    26                                     }
    27 
    28     //这个是通过map 遍历渲染
    29     return routes.map((item, index) => {   //先执行这块代码?
    30         if (item.children) {  //当存在为真的时候,就会去执行上面的代码块
    31             return routeEach(item);
    32         } else {
    33             return <Route path={item.path} key={index} component={item.component} />
    34         }
    35     })
    36 }
    37 
    38 
    39 /*
    40 
    41     Fragment
    42         react的内置组件
    43 
    44         用来当做容器进行使用,特点是不会被渲染到页面上
    45 
    46 
    47         这文件的封装思路是,通过传入数组对象(路由配置),然后导出匹配完好的  路由配置
    48 
    49           <Route path="/detail" render={() => {  return <Detail />  }} />
    50 
    51 
    52 
    53 
    54           这个文件是这样去走的:
    55 
    56 */


    //  tabBar 的创建及使用

     

     tabBar的样式

     

     

     

    1、路在何方? 路在脚下 2、何去何从? 每个人都在探索,未来的方向在何处。如果说某些方向是世人已经公认的,那么就先按照公认的去走吧(ps:站在巨人的肩膀上看世界会清晰)。 如果说方向,当今世人还不清晰准确。那么就大胆往前走吧,对与错并不重要。心中的方向更加重要。
  • 相关阅读:
    安装配置ssh免密码登录
    大数据学习之Linux环境搭建(导航)
    Linux下搭建sqli-labs环境
    SpringMVC freemarker 中 Could not resolve view with name 'XXX.ftl' in servlet with name 'SpringMVC'
    配置FreeMarker时IDEA提示cannot resolve property 'templateLoaderPath'
    MySQL在指定字段后添加一个新字段
    META-INF/MANIFEST.MF file not found in unnamed.war
    Java获取音频播放时长
    JS实现阿拉伯数字转韩文
    微信公众号开发-素材管理-调用接口返回结果一览表
  • 原文地址:https://www.cnblogs.com/yuanjili666/p/11556191.html
Copyright © 2020-2023  润新知