antd:动态获取菜单

修改 app.tsx 文件

  • 修改 getInitialState 方法
export async function getInitialState(): Promise<{
  ...
  menuData?: MenuDataItem[] | undefined;
  fetchMenuList?: Promise<MenuDataItem[] | undefined>;
}> {
  ...

  const fetchMenuList = async () => {
    const menuList = await fetchMenus();
    return menuList;
  };

  const menuData = await fetchMenuList();	
  return {
    ...
    menuData,
  };
}
  • 修改 layout
export const layout: RunTimeLayoutConfig = ({ initialState }) => {
  ...
  return {
	...
	menuDataRender: () => {
      return initialState?.menuData;
    },
  }
}

menuData 结构

[
  {
    path: '/item',
    name: '一级菜单',
    children: [
	  {
	    path: '/item/detail',
	    name: '二级菜单'}
	],
  }
]

menuData 中只需要 path 和 name,对应的 components 需要在 routes 中配置。

路由文件 routes.ts

export default [
  {
	path: '/item',
	routes: [
	  {
	    path: '/item/detail',
	    component: './detail',
	  }
	]
  },
]

如果在 routes 中配置的菜单在 menuData 中没有,可以修改 app.tsx 文件的 onPageChange 方法,重定向到 404。

onPageChange: () => {
  const { location } = umi.history;
  if (initialState?.menuData?.length) {
    // 如果访问页面不在menuData中,重定向到404
    const isInMenu = checkPathExists();
    if (!isInMenu) history.push("/404");
  }
},
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值