react-router-dom 与 后台路由的混合搭配使用

10 篇文章 0 订阅

目前web开发流行的前后台分离模式,但是实际开发中存在需要后台来控制部分路由的情况

  • 思路
  1. 单独配置一个后台路由的对象数组待用
  2. 代码先匹配前台路由
  3. 不匹配的则去匹配上面配置的对象数组, 跳转所需要的路径
  • 具体代码

后台路由配置: redirect.js

import React from "react";
import { Redirect } from "react-router-dom";
import { routerlist } from "@/router.js";
const redirectlist = [
  {
    from: "/pages/A",   //from为后台路由
    to: "/home/A",         //to为需要跳转的路由
    out: false        //用于区分 to跳转是否跳出react应用, 或是非react页面路由
  },
  {
    from: "/pages/B", 
    to: "/pages/B",
    out: true
  },
  {
    from: "/pages/C", 
    to: "/home/C",
    out: false
  },
]
export function routerRedirect(props) {
  var willrdpath = redirectlist.find(i => i.from == props.location.pathname);  //redirectlist 数组中找出当前的跳转路由
  if (willrdpath ) { 
    if(!willrdpath.out) {  //之后不跳出react应用,则去匹配前台路由并跳转
    	var rdpath = routerlist.find(i => i.path == willrdpath.to);  
    	return <Redirect to={rdpath.path + props.location.search} />;   //带上参数
    } else { // 跳出react应用, 则跳转所需页面
        window.location.href =  willrdpath.to +  props.location.search   //带上参数
    }
  } else {
    return <div>404 </div>;
  }
}


前台路由配置: router.js

export const routerlist = [
    {
        path: '/home/A',
        component: () => import('./pages/home/A.jsx')
    }, {
        path: '/home/B',
        component: () => import('./pages/home/B.jsx')
    },{
        path: '/home/C',
        component: () => import('./pages/home/C.jsx')
    },
]

react入口文件: app.js

import React from "react";
import { HashRouter, Route, Switch } from "react-router-dom";
import { Provider } from "react-redux";

import store from "./store";
import {routerlist} from "./router";
import {routerRedirect} from "./redirect.js"

class App extends React.PureComponent {
  render() {
    return (
      <Provider store={store}>
        <HashRouter>
          <Switch>
            {routerlist.map((i, key) => (        //先匹配前台路由
              <Route
                path={i.path}
                component={i.component}
                exact
                key={key}
              />
            ))}
            <Route render={props=>routerRedirect(props)} />  //后匹配其他路由
          </Switch>
        </HashRouter>
      </Provider>
    );
  }
}

export default App;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值