react嵌套路由

index.jsx

import React, { Component } from 'react'

import {HashRouter as Router,Route,Switch,Redirect} from 'react-router-dom'

import Login from './Login'
import Layout from './Layout'
import NotFound from '../404'

export default class Index extends Component {
    render() {
        return (
            <Router>
                <Switch>
                    <Route path="/login" component={Login}/>
                    <Route path="/layout" component={Layout}/>
                    <Redirect exact from="/" to="/login"/>

                    <Route component={NotFound} />
                </Switch>
            </Router>
        )
    }
}

login.jsx

import React, { Component } from "react";

const login = {
  height: "200px",
  width: "300px",
  margin: "100px auto",
  border: "1px solid rgba(92,92,92,0.3)",
  display: "flex",
  flexDirection: "column",
  alignItems: "center",
  justifyContent: "center"
};

class Login extends Component {
  login = () => {
      this.props.history.push('/layout')       ---------------编程式导航
  };

  render() {
    return (
      <div style={login}>
        <div>
          用户名:
          <input type="text" />
          <br />
        </div>
        <div>
          密码:
          <input type="password" />
          <br />
        </div>
        <button onClick={this.login}>登录</button>
      </div>
    );
  }
}

export default Login;

layout.jsx

import React, { Component } from "react";

import { Link, Route, Switch, Redirect } from "react-router-dom";

import "./Layout.css";                            ------------------------------外联css样式导入

import NotFound from '../404'

function Menu1() {                                ----------------------------- 函数式组件
  return <div style={{ color: "purple" }}>我是菜单1</div>;
}

function Menu2() {
  return (
    <div style={{ color: "hotpink" }}>
      <br />
      <br />
      我是菜单2
    </div>
  );
}

class Layout extends Component {
  render() {
    return (
      <div>
        <div className="layout">
          <div className="left">
            左边菜单
            <br />
            <br />
            <Link to="/layout/menu1">菜单1</Link>
            <br />
            <br />
            <Link to="/layout/menu2">菜单2</Link>
          </div>
          <div className="right">
            <div className="content">
              <Switch>
                <Route path="/layout/menu1" component={Menu1} />
                <Route path="/layout/menu2" component={Menu2} />

                <Redirect exact from="/layout/" to="/layout/menu2" />

                <Route component={NotFound}/>
              </Switch>
            </div>
          </div>
        </div>
      </div>
    );
  }
}

export default Layout;

此处route外面没有包裹router

layout.css

.layout{
    width: 600px;
    margin:100px auto;
}

.left{
    width:200px;
    height: 500px;
    float: left;
    border: 1px solid red;
}

.right{
    width:380px;
    height: 500px;
    float: right;
    border: 1px solid green;
}

.top{
    height: 100px;
    border: 1px solid black;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值