antd pro 路由

来源:https://www.cnblogs.com/wang_yb/archive/2020/04/17/12720909.html
-Advertisement-
Play Games

"概要" "antd pro 路由簡介" "路由, 菜單和麵包屑" "頁面之間的路由" "帶參數的路由" "總結" 概要 路由配置是單頁應用的核心之一, antd pro 將所有的路由配置集中在一個文件中, 可以更好的對應用的全局進行管理. 同時, 它的路由還和菜單和麵包屑自動關聯上了, 真的是給開 ...


概要

路由配置是單頁應用的核心之一, antd pro 將所有的路由配置集中在一個文件中, 可以更好的對應用的全局進行管理.
同時, 它的路由還和菜單和麵包屑自動關聯上了, 真的是給開發節省了大量的時間.

antd pro 路由簡介

首先創建一個 antd pro 的項目, 創建方法很簡單, 參見 antd pro 的文檔

antd pro 的路由配置文件在項目根目錄下的 config 文件夾中: /config/config.js
這裡簡單介紹路由相關的配置, 所以對預設生成的模板做一些改動, 去除登錄和許可權的部分. 並定義一些示例的菜單.

 1  routes: [
 2    {
 3      path: '/',
 4      component: '../layouts/BasicLayout',
 5      routes: [
 6        {
 7          path: '/',
 8          redirect: '/menu1/menu11/menu111',
 9        },
10        {
11          path: '/menu1',
12          name: 'menu1',
13          routes: [
14            {
15              path: '/menu1/menu11',
16              name: 'menu11',
17              routes: [
18                {
19                  path: '/menu1/menu11/menu111',
20                  name: 'menu111',
21                  component: './routeSample/Menu111',
22                },
23                {
24                  path: '/menu1/menu11/menu112',
25                  name: 'menu112',
26                  component: './routeSample/Menu112',
27                },
28              ],
29            },
30            {
31              path: '/menu1/menu12',
32              name: 'menu12',
33              component: './routeSample/Menu12',
34            },
35          ],
36        },
37        {
38          path: '/menu2',
39          name: 'menu2',
40          routes: [
41            {
42              path: '/menu2/menu21',
43              name: 'menu21',
44              component: './routeSample/Menu21',
45            },
46          ],
47        },
48      ],
49    },
50    {
51      component: './404',
52    },
53  ],

如上配置後, 顯示的效果如下:
菜單和麵包屑

每個菜單對應的頁面很簡單, 只是顯示一行文字:

1  # 頁面路徑
2  $ ls  ./src/pages/routeSample
3  Menu111.jsx  Menu112.jsx  Menu12.jsx  Menu21.jsx

頁面的代碼如下: (以 Menu111.jsx 為例)

 1  import React from 'react';
 2  import { PageHeaderWrapper } from '@ant-design/pro-layout';
 3  import { Card } from 'antd';
 4  
 5  export default () => (
 6    <PageHeaderWrapper>
 7      <Card>
 8        <h1>這是菜單1-1-1</h1>
 9      </Card>
10    </PageHeaderWrapper>
11  );

路由, 菜單和麵包屑

config.js 中配置路由之後, 會自動生成菜單和麵包屑, 菜單和麵包屑的名稱就是 name 屬性定義的

1  {
2    path: '/menu2/menu21',
3    name: 'menu21',   // 這個就是定義菜單和麵包屑顯示的名稱
4    component: './routeSample/Menu21',
5  },

這裡的名稱是 menu21, 但是頁面上顯示的是 菜單 2-1,
這是因為 antd pro 中預設啟用了國際化功能. 菜單的名稱在 ./src/locales/zh-CN/menu.js 中配置

 1  export default {
 2    'menu.welcome': '歡迎',
 3    'menu.home': '首頁',
 4    'menu.menu1': '菜單1',
 5    'menu.menu1.menu11': '菜單1-1',
 6    'menu.menu1.menu11.menu111': '菜單1-1-1',
 7    'menu.menu1.menu11.menu112': '菜單1-1-2',
 8    'menu.menu1.menu12': '菜單1-2',
 9    'menu.menu2': '菜單2',
10    'menu.menu2.menu21': '菜單2-1',
11  };

頁面之間的路由

創建個新的頁面 Create.jsx, 添加測試的按鈕, 在 menu112 中互相跳轉

首先, 在 config.js 中配置路由信息

 1  {
 2    path: '/menu1/menu11/menu112',
 3    name: 'menu112',
 4    component: './routeSample/Menu112',
 5  },
 6  // 下麵是新增的部分 
 7  {
 8    path: '/menu1/menu11/menu112/create',
 9    name: 'create',
10    hideInMenu: true,  // 這裡設置為true, 就不會顯示在菜單中
11    component: './routeSample/Create',
12  },

Create.jsx 內容如下:

 1  import React from 'react';
 2  import { history } from 'umi';
 3  import { PageHeaderWrapper } from '@ant-design/pro-layout';
 4  import { Card, Button } from 'antd';
 5  
 6  export default () => (
 7    <PageHeaderWrapper>
 8      <Card>
 9        <h1>這是用來新增內容的頁面</h1>
10        <Button
11          onClick={() => {
12            history.goBack();
13          }}
14        >
15          返回
16        </Button>
17      </Card>
18    </PageHeaderWrapper>
19  );
  • umi3 中, 沒有 umi/router 這個 package 了, 需要使用 history 來進行路由跳轉, antd pro 中的相關文檔可能還沒有更新
  • history.goBack() 用來返回上一次的路由

Menu112.jsx 中放個測試按鈕來跳轉到 這個新增頁面

 1  export default () => (
 2    <PageHeaderWrapper>
 3      <Card>
 4        <h1>這是菜單1-1-2</h1>
 5        <Button
 6          type="primary"
 7          onClick={() => {
 8            history.push('/menu1/menu11/menu112/create');
 9          }}
10        >
11          新增
12        </Button>
13      </Card>
14    </PageHeaderWrapper>
15  );

這樣, Create.jsx 和 Menu112.jsx 之間就可以來回跳轉了

帶參數的路由

再加個頁面 Edit.jsx, 演示路由中參數的傳遞.

同樣, 現在路由配置中加上 Edit.jsx 的路由

 1  {
 2    path: '/menu1/menu11/menu112/create',
 3    name: 'create',
 4    hideInMenu: true,
 5    component: './routeSample/Create',
 6  },
 7  {
 8    path: '/menu1/menu11/menu112/edit/:id',   // 這裡 :id 就是路由中的參數
 9    name: 'edit',
10    hideInMenu: true,
11    component: './routeSample/Edit',
12  },

menu.js 中別忘了加上 name edit 對應的配置.

然後, 在 Menu112.jsx 中再增加一個 編輯 按鈕

 1  import React from 'react';
 2  import { history } from 'umi';
 3  import { PageHeaderWrapper } from '@ant-design/pro-layout';
 4  import { Card, Button } from 'antd';
 5  
 6  export default () => (
 7    <PageHeaderWrapper>
 8      <Card>
 9        <h1>這是菜單1-1-2</h1>
10        <Button
11          type="primary"
12          onClick={() => {
13            history.push('/menu1/menu11/menu112/create');
14          }}
15        >
16          新增
17        </Button>
18        &nbsp;&nbsp;&nbsp;
19        <Button
20          type="primary"
21          onClick={() => {
22            history.push('/menu1/menu11/menu112/edit/111');
23          }}
24        >
25          編輯
26        </Button>
27      </Card>
28    </PageHeaderWrapper>
29  );

這裡傳入參數 id 的值是 111

最後是 Edit.jsx 頁面的代碼:

 1  import React from 'react';
 2  import { history, useParams } from 'umi';
 3  import { PageHeaderWrapper } from '@ant-design/pro-layout';
 4  import { Card, Button } from 'antd';
 5  
 6  export default () => {
 7    const params = useParams();
 8    return (
 9      <PageHeaderWrapper>
10        <Card>
11          <h1>這是用來編輯內容的頁面</h1>
12          <p>參數 ID: {params.id}</p>
13          <Button
14            onClick={() => {
15              history.goBack();
16            }}
17          >
18            返回
19          </Button>
20        </Card>
21      </PageHeaderWrapper>
22    );
23  };

獲取參數就是使用 useParams 這個 API

總結

最後, 是幾個相關頁面的截圖:

  • Menu112.jsx
    菜單 112
  • Create.jsx
    新建項目
  • Edit.jsx
    編輯項目

補充一點, 路由中參數儘量簡單, 如果頁面之間傳輸的數據比較多, 那麼最好通過 antd pro 的 Model 來共用. 儘量不要在 url 中放置太多的東西.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、ES6 基本認識 1、什麼是 ES6? ES6 指的是 ECMAScript 6.0,是JavaScript 語言的一個標準。其目標是使JavaScript 可以用來編寫複雜的大型的應用程式,成為企業級開發的語言。 2、ES6 與 JavaScript 的區別? ES6 是 JavaScript ...
  • p5.js完成星際穿越特效 歡迎關註我的 "博客" ,⬅️點他即可。 星際穿越,是模仿漫天星辰撲面而來的感覺。 最關鍵的在於對透視的掌握。 參考資料:The Coding Train 00 思路構想 1. 星星是一個圓,會隨機的出現在屏幕的任何位置; 2. 星星會從遠處到眼前: 圓的大小 來表示遠近 ...
  • ES6 axios執行原理 Axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中 http://www.axios-js.com/zh-cn/docs/ 1. axios.get('1111.json') .then(response => { consol ...
  • (1) 鏈接式:(外部引入.css文件) ( 用得比較多 ) <link>在html載入前就被引用 在網頁的<head></head>標簽對中用<link>引入外部樣式表,使用html規則引入外部css : <link href="./css/style.css" rel="stylesheet" ...
  • 一、塌陷 1.當position設置為:absolute或者fixed時,元素的display會轉換為block。(設置float也會產生這樣的效應) 2.正常情況下,div會被內容撐開,但是如果設置了 1. 的情況下,父元素就會產生 塌陷 ,失去高度。 解決辦法: 給父元素設置高度。 給父元素設置 ...
  • 在項目中用到cookie一般是用在註冊時的記住賬號密碼或保存固定時間的數據 // cookie 存儲setCookie(c_name, c_pwd, exdays) { // 設置存儲用戶名密碼 var exdate = new Date(); exdate.setTime(exdate.getTi ...
  • 1. 事件流(事件傳播) 描述的是從頁面接收事件的順序。 IE事件流是事件冒泡流,NetScape是事件捕獲流。 window: window document: document html: document.documentElement body: document.body div: doc ...
  • 本文隨便寫了點自己對WebSoket通訊協議理解,在兩種框架上玩的Demo,然後踩了幾個坑還有沒填上的坑(歡迎評論指導一下)。 WebSocket是什麼?使用WebSocket的原因? WebSocket是網路通訊協議的一種。 提到網路通訊協議,我第一個就想到了HTTP協議,但是HTTP協議的一些特 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...