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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...