AntD Pro V4支持動(dòng)態(tài)Menu實(shí)戰(zhàn)

前端升級(jí)到AntD Pro V4后,官方文檔上說(shuō)支持了動(dòng)態(tài)Menu的能力,并且還給出了實(shí)現(xiàn)方案。本以為可以按照官方文檔開(kāi)啟一下這個(gè)動(dòng)態(tài)Menu的功能。不曾想,不試不知道,一試嚇一跳,完全走不通么。

還是需要投入到萬(wàn)能的谷歌的懷抱,經(jīng)過(guò)好一陣子谷歌,好一陣子驗(yàn)證,最終搞定。這篇文章就來(lái)給大家介紹一下AntD Pro V4支持動(dòng)態(tài)Menu的完整實(shí)現(xiàn)。

完整實(shí)現(xiàn):

這個(gè)實(shí)現(xiàn)參考了網(wǎng)上多位大俠的方案,最終融合而成。大致分為如下六步。

第一步,添加model

在src/models/中添加menu.ts文件,文件內(nèi)容:

import { getMenuData } from '@/services/menu'; // 通過(guò)后臺(tái)返回特定的數(shù)組json或者mock模擬數(shù)據(jù)

import { Reducer } from 'redux';

import { Effect } from './connect';

export interface MenuModelState {

? menuData: any[];

}

export interface MenuModelType {

? namespace: 'menu';

? state: MenuModelState;

? effects: {

? ? getMenuData: Effect;

? };

? reducers: {

? ? save: Reducer<MenuModelState>;

? };

}

const MenuModel: MenuModelType = {

? namespace: 'menu',

? state: {

? ? menuData: [],

? },

? effects: {

? ? *getMenuData({ payload, callback }, { call, put }) {

? ? ? const response = yield call(getMenuData);

? ? ? yield put({

? ? ? ? type: 'save',

? ? ? ? payload: response,

? ? ? });

? ? ? if (callback) callback(response);

? ? },

? },

? reducers: {

? ? save(state, action) {

? ? ? return {

? ? ? ? ...state,

? ? ? ? menuData: action.payload || [],

? ? ? };

? ? },

? },

};

export default MenuModel;


第二步,添加service

在src/services/中添加menu.ts文件,文件內(nèi)容:

import request from 'umi-request';

const BASE_URL = '/v1';

export async function getMenuData(params:any) {

? console.log('===========in getMenuData');

? console.log(params);

? return request(BASE_URL + '/menu/getMenuData', {

? ? method: 'GET',

? ? params: params,

? });

}


第三步,修改connect.d.ts的ConnectState來(lái)添加menu

修改文件src/models/connect.d.ts:


第四步,修改BasicLayout.tsx文件來(lái)關(guān)聯(lián)menu

修改文件src/layouts/BasicLayout.tsx:


第五步,添加mock文件

在src/mock/中添加menu.ts文件,文件內(nèi)容:

export default {

? ? 'Get /v1/menu/getMenuData': [

? ? ? ? {

? ? ? ? ? path: '/dashboard',

? ? ? ? ? name: 'dashboard',

? ? ? ? ? icon: 'dashboard',

? ? ? ? ? children: [

? ? ? ? ? ? {

? ? ? ? ? ? ? path: '/dashboard/analysis',

? ? ? ? ? ? ? name: 'analysis',

? ? ? ? ? ? ? exact: true,

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? path: '/dashboard/monitor',

? ? ? ? ? ? ? name: 'monitor',

? ? ? ? ? ? ? exact: true,

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? path: '/dashboard/workplace',

? ? ? ? ? ? ? name: 'workplace',

? ? ? ? ? ? ? exact: true,

? ? ? ? ? ? },

? ? ? ? ? ],

? ? ? ? }

? ? ? ],

};


第六步,支持國(guó)際化

為了menu支持國(guó)際化,只需要在menu數(shù)據(jù)中添加locale屬性。

修改src/mock/menu.ts:

export default {

? ? 'Get /v1/menu/getMenuData': [

? ? ? ? {

? ? ? ? ? path: '/dashboard',

? ? ? ? ? name: 'dashboard',

? ? ? ? ? locale: 'menu.dashboard',//國(guó)際化

? ? ? ? ? icon: 'dashboard',

? ? ? ? ? children: [

? ? ? ? ? ? {

? ? ? ? ? ? ? path: '/dashboard/analysis',

? ? ? ? ? ? ? name: 'analysis',

? ? ? ? ? ? ? exact: true,

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? path: '/dashboard/monitor',

? ? ? ? ? ? ? name: 'monitor',

? ? ? ? ? ? ? exact: true,

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? path: '/dashboard/workplace',

? ? ? ? ? ? ? name: 'workplace',

? ? ? ? ? ? ? exact: true,

? ? ? ? ? ? },

? ? ? ? ? ],

? ? ? ? }

? ? ? ],

};


同時(shí)在src/locales/xxx/menu.ts中添加相應(yīng)的國(guó)際化配置。比如:

src/locales/zh-CN/menu.ts中配置menu.dashboard:

export default {

? ...

? 'menu.dashboard': '桌面'

? }


到此為止,你的前端已經(jīng)支持了動(dòng)態(tài)Menu了,并且實(shí)現(xiàn)了通過(guò)mock的方式來(lái)調(diào)試了。后面,你需要在服務(wù)端實(shí)現(xiàn)接口Get /v1/menu/getMenuData就可以了。

總結(jié):

經(jīng)過(guò)這六個(gè)步驟,你現(xiàn)在已經(jīng)開(kāi)啟了AntD Pro V4的動(dòng)態(tài)Menu時(shí)代。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容