2

前提

  • 了解react框架
  • 熟悉jsx语法
  • 有react-router-dom插件使用基础

react路由封装

在react项目下src目录下新建router文件夹,router文件目录下新建index.js和config.js
  • router/config.js ----生成并抛出路由配置表
    // 引入路由视图组件
    import Index from '../views/Index'
    import Movie from '../views/two/Movie'
    import Place from '../views/two/Place'
    import My from '../views/two/My'
    // 路由配置表  数组
    const routes=[
        {
            path:'/index',
            component:Index,
            children:[
                {
                    path:'/index/movie',
                    component: Movie
                },
                {
                    path:'/index/place',
                    component: Place
                },
                {
                    path:'/index/my',
                    component: My
                }
            ]
        }
    ];
    // 抛出路由配置表
    export default routes;
  • router/index.js 加载路由视图组件的函数组件
    // 加载路由视图组件得函数组件 -加载条件-路由路径对应路由视图组件 一一对应得关系   --->获取路由配置表
    import React from 'react';
    // 引入路由内置组件
    import {Route} from 'react-router-dom'
    const RouterView=(props)=>{   // 函数组件得props属性
        console.log(props.routes);   // 获取路由配置表
        // 一一对应关系  遍历
        return props.routes.map((item,index)=>{
            // 路由对象   加载路由视图组件
            return <Route key={index} path={item.path} render={(routeProps)=>{  // routeProps 路由元信息
                // 判断当前得路由对象是否存在子路由
                if(item.children){   // 存在路由嵌套    递归函数
                return <item.component {...routeProps} routes={item.children}/> 
                }else{    // 不存在路由嵌套
                    return <item.component {...routeProps}/>
                }
            }}/>
        })
    }
    export default RouterView;
使用
    // 根组件  App.js
    import React, { Component } from 'react'
    // 引入路由内置组件
    import {BrowserRouter} from 'react-router-dom'
    // 引入加载路由视图得函数组件
    import RouterView from './router/index'
    // 引入路由配置表
    import config from './router/config'
    export default class App extends Component {
        render() {
            return (
                <div className='App'>
                    <BrowserRouter>
                        {/* 加载/展示路由视图组件 */}
                        <RouterView routes={config}/>
                    </BrowserRouter>
                </div>
            )
        }
    }

react路由封装核心-----组件传参/js逻辑/递归函数


盒子君
34 声望7 粉丝

行走在帝都的搬运工~