欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React+Router多級導航切換路由方式

 更新時間:2024年03月14日 10:17:26   作者:那等雨停吧  
這篇文章主要介紹了React+Router多級導航切換路由方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

背景

我們需要開發(fā)一個管理平臺,登陸、注冊及網(wǎng)站首頁等不需要加載用戶信息的頁面放置在系統(tǒng)外部

系統(tǒng)內(nèi)部則是需要驗證用戶身份及其角色的頁面。

文件結構

注:輸出文件樹及文件 tree ./src /F

│  index.html 頁面文件入口
│  index.js js文件入口
│  style.scss
├─actions
│      api.js
│      base.js
├─containers
│  │  contentMain.jsx 填充layout中的content部分
│  │  layout.jsx 系統(tǒng)頁面中的布局,包含菜單導航
│  │  noPage.jsx  頁面走丟
│  │  personal.jsx 
│  │  style.scss
│  ├─account
│  │      new.jsx
│  │      table.jsx
│  ├─clients
│  │      new.jsx
│  │      table.jsx
│  ├─firms
│  │      new.jsx
│  │      table.jsx
│  ├─index
│  │      index.jsx
│  │      items.jsx
│  │      style.scss
│  ├─login
│  │      index.jsx
│  │      style.scss
│  └─resetpassword
│          index.jsx
│          style.scss
└─ xxxxx···

最外層路由

import React from 'react';
import {render} from 'react-dom';
import {Provider} from 'react-redux';
import { HashRouter as Router, Route, Switch } from 'react-router-dom';

const IndexPage = require('./containers/index/index').default;
const Layout = require('./containers/layout').default;
const Login = require('./containers/login').default;
const RestPassWord = require('./containers/resetpassword').default;
const NotFoundPage = require('./containers/noPage').default;


import configureStore from './store';
import './style.scss'
const store = configureStore();

render(
    <Provider store={store}>
      <Router>
          <Switch>
            <Route path="/main" component={Layout} /> //模糊匹配,只要路由中有/main就會加載Layout組件
            <Route exact path="/index" component={IndexPage} /> // 精確匹配
            <Route exact path="/login" component={Login} />
            <Route exact path="/reset" component={RestPassWord} />
            <Route component={NotFoundPage} />
          </Switch>
        </Router>
    </Provider>, document.getElementById('root')
  );

二級路由

在Layout組件中,對路由繼續(xù)匹配

# Layout
import React, { Component } from 'react';
import { Layout, Menu, Avatar, Icon , Dropdown} from 'antd';
import {Link} from 'react-router-dom';
import ContentMain from './contentMain';
import { createHashHistory } from 'history';
import './style.scss';
const history = createHashHistory();
const { Header, Content, Footer, Sider } = Layout;
const { SubMenu } = Menu;
export default class LayoutPagae extends Component {
  state = {
    collapsed: false,
    user: 'Liz',
  };

  onCollapse = collapsed => {
    console.log(collapsed);
    this.setState({ collapsed });
  };

  handleLoginOut = e => {
    e.preventDefault();
    history.push('/login');
  };
  render() {
    const menu = (
      <Menu>
        <Menu.Item>
          <Link to={'/main/personal'}>個人中心</Link>
        </Menu.Item>
        <Menu.Item>
          <div onClick={this.handleLoginOut}>退出</div>
        </Menu.Item>
      </Menu>
    );
    return (
      <Layout style={{ minHeight: '100vh' }}>
        <Sider collapsible collapsed={this.state.collapsed} onCollapse={this.onCollapse}>
          <div className="logo"> CRM </div>
          <Menu theme="dark" defaultSelectedKeys={['person']} defaultOpenKeys={['table']}  mode="inline">
            <SubMenu
              key="person"
              title={
                <span>
                  <Icon type="user" />
                  <span>個人客戶</span>
                </span>
              }
            >
              <Menu.Item key="table"><Link to={'/main/client/table'}>個人客戶表</Link></Menu.Item>
              <Menu.Item key="new"><Link to={'/main/client/new'}>添加個人客戶</Link></Menu.Item>
            </SubMenu>
            <SubMenu
              key="firms"
              title={
                <span>
                  <Icon type="team" />
                  <span>企業(yè)客戶</span>
                </span>
              }
            >
              <Menu.Item key="table"><Link to={'/main/firms/table'}>企業(yè)客戶表</Link></Menu.Item>
              <Menu.Item key="new"><Link to={'/main/firms/new'}>添加企業(yè)客戶</Link></Menu.Item>
            </SubMenu>
            <SubMenu
              key="account"
              title={
                <span>
                  <Icon type="area-chart" />
                  <span>績效匯總</span>
                </span>
              }
            >
              <Menu.Item key="table"><Link to={'/main/account/table'}>績效匯總表</Link></Menu.Item>
              <Menu.Item key="new"><Link to={'/main/account/new'}>添加新成交</Link></Menu.Item>
            </SubMenu>
          </Menu>
        </Sider>
        <Layout>
          <Header>
            <Dropdown overlay={menu}>
              <Avatar style={{ backgroundColor: '#f56a00', verticalAlign: 'middle' }} size="large">
                {this.state.user}
              </Avatar>
            </Dropdown>
          </Header>
          <Content style={{ margin: '0 16px' }}>
            <ContentMain />
          </Content>
          <Footer style={{ textAlign: 'center' }}>Ant Design ?2018 Created by Ant UED</Footer>
        </Layout>
      </Layout>
    );
  }
}

contentMain組件

import React from 'react';
import {HashRouter as Router,Route, Switch} from 'react-router-dom';
import ClientsTable from './clients/table';
import ClientsNew from './clients/new';
import FirmsTable from './firms/table';
import FirmsNew from './firms/new';
import AccountTable from './account/table';
import AccountNew from './account/new';
import Personal from './personal';
class ContentMain extends React.Component {
	render() {
		return (
			<div>
				<Router>
					<Switch>
						<Route exact path='/main/client/table' component={ClientsTable}/> //全部都精確匹配
						<Route exact path='/main/client/new' component={ClientsNew}/>
						<Route exact path='/main/firms/table' component={FirmsTable}/>
						<Route exact path='/main/firms/new' component={FirmsNew}/>
						<Route exact path='/main/account/table' component={AccountTable}/>
						<Route exact path='/main/account/new' component={AccountNew}/>
						<Route exact path='/main/personal' component={Personal}/>
					</Switch>
				</Router>
			</div>
		)
	}
}

export default ContentMain

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • React報錯信息之Expected?an?assignment?or?function?call?and?instead?saw?an?expression

    React報錯信息之Expected?an?assignment?or?function?call?and?

    這篇文章主要介紹了React報錯之Expected?an?assignment?or?function?call?and?instead?saw?an?expression,下面有兩個示例來展示錯誤是如何產(chǎn)生的,需要的朋友可以參考下
    2022-08-08
  • react源碼層探究setState作用

    react源碼層探究setState作用

    寫react的時候,踩了幾次坑發(fā)現(xiàn)setstate之后state不會立刻更新,于是判定setstate就是異步的方法,但是直到有一天,我想立刻拿到更新的state去傳參另一個方法的時候,才問自己,為什么setstate是異步的?準確地說,在React內(nèi)部機制能檢測到的地方,setState就是異步的
    2022-10-10
  • react系列從零開始_簡單談談react

    react系列從零開始_簡單談談react

    下面小編就為大家?guī)硪黄猺eact系列從零開始_簡單談談react。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • react-redux action傳參及多個state處理的實現(xiàn)

    react-redux action傳參及多個state處理的實現(xiàn)

    本文主要介紹了react-redux action傳參及多個state處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • React state狀態(tài)屬性詳細講解

    React state狀態(tài)屬性詳細講解

    React將組件(component)看成一個狀態(tài)機(State Machines),通過其內(nèi)部自定義的狀態(tài)(State)和生命周期(Lifecycle)實現(xiàn)并與用戶交互,維持組件的不同狀態(tài)
    2022-09-09
  • React中井字棋游戲的實現(xiàn)示例

    React中井字棋游戲的實現(xiàn)示例

    本文主要介紹了React中井字棋游戲的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 詳解react中的state的簡寫方式

    詳解react中的state的簡寫方式

    React是一個狀態(tài)機主要體現(xiàn)在state上,通過與用戶交易實現(xiàn)不同的狀態(tài),state是組件的私有屬性,是用來初始化的,本文重點給大家介紹react中的state的簡寫方式,感興趣的朋友一起看看吧
    2021-08-08
  • 詳解關于React-Router4.0跳轉不置頂解決方案

    詳解關于React-Router4.0跳轉不置頂解決方案

    這篇文章主要介紹了詳解關于React-Router4.0跳轉不置頂解決案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • react實現(xiàn)頁面水印效果的全過程

    react實現(xiàn)頁面水印效果的全過程

    大家常常關注的是網(wǎng)站圖片增加水印,而很少關注頁面水印,其實這個需求也是比較常見的,比如公文系統(tǒng)、合同系統(tǒng)等,這篇文章主要給大家介紹了關于react實現(xiàn)頁面水印效果的相關資料,需要的朋友可以參考下
    2021-09-09
  • React源碼分析之useCallback與useMemo及useContext詳解

    React源碼分析之useCallback與useMemo及useContext詳解

    這篇文章主要介紹了React useCallback與useMemo及useContext源碼分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11

最新評論