三、路由配置

2021-06-16  本文已影响0人  fanren

1. 代码

import React, { Component } from "react";
import { Route } from "react-router-dom";

function RouteWithSubRoute(route) {
    return (
        <Route path={route.path} render={ props => (
            <route.component {...props} routes={route.routes}></route.component>
        )}>
        </Route>
    )
}

export default RouteWithSubRoute;
import React, { Component } from "react";
import { BrowserRouter as Router, Switch, Link } from "react-router-dom";

import User from "./views/User";
import Home from "./views/Home";
import Passord from './views/Passord';
import Userinfo from './views/Userinfo';
import RouteWithSubRoute from './RouteWithSubRoute';

const routes = [
  {
    path: '/home',
    component: Home
  },
  {
    path: '/user',
    component: User,
    routes: [
      {
        path: '/user/password',
        component: Passord
      },
      {
        path: '/user/userinfo',
        component: Userinfo
      }
    ]
  }
];

class App extends Component {
  render() {
    return (
      <Router>
        <div style={{padding: 20}}>
          <nav>
            <ul>
              <li>
                <Link to="/home">Home</Link>
              </li>
              <li>
                <Link to="/user">Users</Link>
              </li>
            </ul>
          </nav>
          <Switch>
            {
              routes.map((route, i) => (
                <RouteWithSubRoute key={i} {...route}></RouteWithSubRoute>
              ))
            }
          </Switch>
        </div>
      </Router>
    );
  }
}

export default App;
import React, { Component } from "react";
import { Switch, Link } from "react-router-dom";
import RouteWithSubRoute from '../RouteWithSubRoute';

class User extends Component {
  render() {
    let routes = this.props.routes;
    return (
      <div style={{ padding: 20 }}>
        <h2>用户</h2>
        <nav>
          <ul>
            <li>
              <Link to={`/user/password`}>设置密码</Link>
            </li>
            <li>
              <Link to={`/user/userinfo`}>个人信息</Link>
            </li>
          </ul>
        </nav>
        <Switch>
            {
              routes.map((route, i) => (
                <RouteWithSubRoute key={i} {...route}></RouteWithSubRoute>
              ))
            }
        </Switch>
      </div>
    );
  }
}

export default User;

路由配置功能,其实就是对路由功能的进一步封装;把以前静态在代码写死的路由配置,单独提出来,把所有的路由放到一个单独的配置文件中;

上一篇 下一篇

猜你喜欢

热点阅读