React之动态路由、编程是导航

简单模拟动态路由、编程是导航:
登录页:根据路由传参
在这里插入图片描述
路由页:采用路由嵌套,并通过props赋值给route将参数传入到Home页
在这里插入图片描述
Home页,通过路由props中route获取参数
在这里插入图片描述

在这里插入图片描述

路由例子

路由跳转
import React from 'react'
import { Menu } from 'antd';
import Menus from './MenuList' //导航数据
import { Link } from 'react-router-dom'
import './index.less'

//SubMenu :antd里的导航模板标签、二级标签  Menu.Item  :一级标签
const SubMenu = Menu.SubMenu;

class NavList extends React.Component{
    
    //递归调用,多级导航
    renderNav(){
        return this.renderMenuItem(Menus)
    }
    //根据导航数据,递归遍历生成多级导航
    renderMenuItem(arr){
        return arr.map((item)=>{
            if(item.children){
                return (
                    <SubMenu key={item.path} title={item.title}>
                        {this.renderMenuItem(item.children)}
                    </SubMenu>
                )
            }else{
                return  <Menu.Item key={item.path}>
                            <Link to={item.path}>{item.title}</Link>
                        </Menu.Item>
            }
        })
    }

    render(){
        return(
            <div className='navleft'>
                <div className='title'>
                      <img src="/asset/logo.svg" alt=""/>
                      <h2 id='title'>mymanage</h2>
                </div>
                <Menu  theme ='dark' style={{ width: 256 }} >
                  {this.renderNav()}
                </Menu>
            </div>
        )
    }
}

export default NavList

//***************  嵌套路由  ******************

import React from 'react'
import {BrowserRouter as Router,Route,Switch,Redirect}  from 'react-router-dom'  
   // 引入路由相关标签,as起别名
import Admin from '../pages/Home/Home'
import Login from '../pages/Login/Login'
import NotFind from '../pages/NotFind/NotFind'
import User from '../pages/User/User'
import GoodsLlist from '../pages/Goods/List'

class Header extends React.Component{
    render(){
        return(
            <Router>
                <div>     
                <hr/>
                <Switch>
                    <Route exact path='/'>
                        {/* 路由重定向 Redirect */}
                        <Redirect to='/login'></Redirect>
                    </Route> 
                    <Route path='/login' component={Login}></Route> 
                        {/* 嵌套路由 */}
                    <Route path='/admin/:id' render={(props)=>{
                        return <Admin route={props}>
                                    <Route exact path='/admin' component={GoodsLlist}></Route>
                                    <Route path='/admin/user' component={User}></Route>
                                    <Route path='/admin/goods/list' component={GoodsLlist}></Route>
                                </Admin>
                         }}>
                    </Route> 
                    {/* Switch 设置没匹配路径,则到404组件页面 */}
                    <Route  component={NotFind}></Route> 
                </Switch>
                </div>
            </Router>
        )
    }
}
export default Header
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值