Umi从服务端动态获取路由

本文介绍了如何在Umi项目中从服务端动态获取路由,通过`patchRoutes`和`render`函数配合,实现左侧菜单的动态加载,并处理组件的异步加载问题。关键步骤包括:设置动态菜单数组、使用`AsyncComponent`导入异步组件和适配不同结构的路由配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Umi从服务端动态获取路由

背景

一开始我是在route.ts文件下将路由写死,需求方提出要从服务端动态获取左侧菜单,实现动态路由

1、前提

根据UmiJs官方文档中,我们可以看到运行时配置,提供了配置项,patchRoutes({ routes })和render(oldRender: Function)

  1. patchRoutes({ routes }) ,官方demo中介绍的清清楚楚,在这我们可以获取已经配置好的路由,也可以进行修改;
  2. render(oldRender: Function) ,在这里向服务端发起请求,获取菜单配置,因为render比patchRoutes先执行;

2、过程

1、先定义一个菜单数组,用来存放从服务端获取的菜单,如: let MenuList = [];
2、在render里面,发起请求,获取菜单配置,并赋给1中定义的MenuList,在这里注意调用oldRender(),至少调用一次,否则页面将始终处于加载状态(注意位置哦)

在这里插入图片描述
3、获取到数据之后,我们就可以在patchRoutes({routes}) ,给获取到的配置 和 原先有的路由配置进行修改,在这里,我要将menuList中的配置放进routes,示例如下:
这里的
4、这里的parseRoute函数,我做的主要是简单的对MenuList进行遍历,将其中的自己需要的配置项插进routes,这部分要根据服务端给的数据结构进行操作

在这里插入图片描述

注意:到这一步 你只能动态加载路由,并不能进行切换
————————手动分割线—————————————
这个问题也困扰了我好久,最后请教大佬

在这里对比了静态路由和以上写法,如果直接按以上写component,从日志打印中可以看到引入的component是字符串,与静态路由中的component结构不一,需要异步加载组件,使用es6引入模块来引入组件,注意组件需要具体到哪个index,否则会引起编译报错

5、引入AsyncComponent,将上面component代码修改为
在这里插入图片描述
附:AsyncComponent.ts
在这里插入图片描述

UMI(Unified Model Interface)是一个基于React的JavaScript应用框架,它支持单页应用(SPA)开发,并提供了一套方便的工具来管理前端项目结构和路由。关于动态配置Favicon(网站的小图标),在UMI中,你可以通过以下步骤来实现: 1. **设置默认 favicon**:通常,你需要在项目的`public`文件夹下创建一个`favicon.ico`文件作为静态资源。这将成为你的默认Favicon。 2. **动态生成 favicon**:如果你想要根据某些条件(如用户登录状态、主题等)动态加载不同的Favicon,可以在UI层面上处理。例如,你可以使用JavaScript,在页面加载时根据需要从服务器获取SVG、PNG或其他格式的Favicon图片。 3. **使用umi-service-loader**:UMI允许你在服务端使用`umi-service-loader`来动态注入一些数据,包括Favicon。在`service.ts`中,你可以编写一个返回自定义FaviconURL的服务函数,然后在需要的地方使用这个函数返回的URL。 4. **更新HTML头部**:在`pages/_app.tsx`或全局布局组件中,你可以动态设置`<link>`标签,将获取到的Favicon URL插入其中,确保替换默认的`favicon.ico`引用。 ```jsx // pages/_app.tsx 或 全局组件 import dynamicFaviconUrl from &#39;@/service/favicons&#39;; // 假设这是一个获取动态Favicon URL的服务 function MyApp({ Component, pageProps }) { const faviconUrl = dynamicFaviconUrl(); // 获取Favicon URL return ( <html> <head> <link rel="icon" href={faviconUrl} /> {/* ...其他head元素 */} </head> {/* ...body内容 */} </html> ); } ``` 记得在生产环境中也要适当地缓存Favicon URL,避免频繁请求。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值