react-router-config实现

react-router二次封装实现Vue-router使用方式

和vue一样我们先创建一个config文件来管理我们的路由页面,页面文件如下
因为编辑器有比较强大的路径提示并且只是一个分享,所以就没有配置别名

路由的配置

//组件的引入
import Home from '../contentais/home/index'
import Login from "../contentais/login/index"
import Business from './../contentais/home/business/index';
import Finance from './../contentais/home/finance/index';
import Tissue from './../contentais/home/tissue/index';
import Statistics from './../contentais/home/statistics/index';
import Order from './../contentais/home/order/index';
import UserHome from './../contentais/home/userHome/index';
import Loans from './../contentais/home/order/loans/index';
import Transfer from './../contentais/home/order/transfer/index';
import Insurance from './../contentais/home/order/insurance/index';

const RouteConfig = [
    {
        //title 
        title: "首页",
        //路由地址
        path: "/Home",
        //关键字重定向
        defaultRedirect: true,
        //组件
        component: Home,
        //二级路由
        children: [
            {
                key: "1",
                defaultRedirect: true,

                title: "首页",
                path: "/Home/one",
                component: UserHome,
            },
            {
                key: "sub1",
                title: "订单管理",
                path: "/Home/order",
                component: Order,
                //三级路由
                children: [
                    {
                        defaultRedirect: true,

                        key: "2",
                        title: "贷款订单",
                        path: "/Home/order/loans",
                        component: Loans,
                    },
                    {
                        key: "3",
                        title: "转单订单",
                        path: "/Home/order/transfer",
                        component: Transfer,
                    },
                    {
                        key: "4",
                        title: "保险订单",
                        path: "/Home/order/insurance",
                        component: Insurance,
                    },
                    //三级路由的重定向   默认显示的页面
                    {
                        path: "/Home/order",
                        redirect: "/Home/order/loans"
                    }
                ]
            },
            {
                key: "5",
                title: "财务管理",
                path: "/Home/finance",
                component: Finance,
            }
            ,
            {
                key: "6",
                title: "组织架构",
                path: "/Home/tissue",
                component: Tissue,
            },
            {
                key: "7",
                title: "数据统计",
                path: "/Home/statistics",
                component: Statistics,
            },
            {
                key: "8",
                title: "商务管理",
                path: "/Home/business",
                component: Business,
            },
            //二级路由的重定向   默认显示的页面
            {
                path: "/Home",
                redirect: "/Home/one"
            }
        ]
    },
    {
        title: "登陆",
        path: "/Login",
        component: Login,
    }, {
        //一级路由的重定向
        path: "/",
        redirect: "/Home"
    }
]
export default RouteConfig;

逻辑的实现

import { Route, Switch, Redirect } from "react-router-dom"
import React, { Component } from 'react';
class RouteView extends Component {
    render() {

        //props接收配置文件
        //routers 下一级路由的参数
        //defaultConfig默认传参
        const { routers, defaultConfig } = this.props
        let routerDate = routers ? routers : defaultConfig;
        //数据二次处理

        //筛除带有重定向的
        let routerDatepath = routerDate.filter((item) => {
            return !item.redirect
        })
        //筛选重定向
        let defualtRouter = routerDate.filter((item) => {
            return item.redirect
        })
        //重定向
        let defualtRedirect = defualtRouter.map((item, i) => {
            return <Redirect key={i} path={item.path} to={item.redirect}></Redirect>
        })
        return (<Switch>
            {
                routerDatepath && routerDatepath.map((item, index) => {
                    const Comp = item.component
                    // 一个大坑 要用render 不然用component会导致页面的回流
                    return <Route path={item.path} render={
                        //api 路由相关参数参数及其它
                        (api) => {
                            //动态的title
                            document.title = item.title || "后台管理系统"
                            //把下一级路由参数存入props中
                            return <Comp routers={item.children} {...api}></Comp>
                        }
                    } key={"key" + item.key}></Route>
                    //重定向
                }).concat(defualtRedirect)
            }
        </Switch>)
    }
}
export default RouteView;

使用方法

app.jsx

import React, { Component } from 'react';
import { BrowserRouter as Router } from "react-router-dom"
import RouteConfig from '../router/RouteConfig';
import RouteView from './../router/RouteView';
class App extends Component {
    render() {
        return <div className="wrapper">
            <Router>
                //传入默认路由配置文件
                <RouteView defaultConfig={RouteConfig}></RouteView>
            </Router>
        </div>
    }
}
export default App;

二级路由的调用

import React, { Component } from 'react';
import RouteView from './../../router/RouteView';
import SiderMenu from './../../components/SiderMenu/index';
import "./index.css"
class Home extends Component {
    render() {
        //接收路由配置
        const { routers } = this.props
        return <div className="home-wrapper">
            <div className="left">
                <div className="user">
                    <div className="user-img">
                    </div>
                    <p className="mt12">你瞅啥</p>
                    <b className="mt12 radius"></b>
                </div>
                //侧边栏的组件
                <SiderMenu style={{ background:"#2F3B4C"}} {...this.props}></SiderMenu>
            </div>
            <div className="right">
                //传入RouteView当中进行处理
                <RouteView routers={routers}></RouteView>
            </div>
        </div>
    }

}
export default Home;

项目地址

https://github.com/wangjinshen/React-router

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值