umi插件开发仿dumi项目自动生成导航栏实现详解
短信预约 -IT技能 免费直播动态提醒
引言
前面我们已经完成了页面布局和页面路由,现在我们的导航栏还是自己写死在代码中,现在我们来改造成自动根据页面路由来生成导航栏。
获取路由信息
我们在前面创建的路由对象,会被umi
存入appData
对象中,umi
提供了useAppData
API可以用于获取路由信息。
创建获取导航数据hook
// /class="lazy" data-src/client/theme-api/useNavData.ts
import { useAppData } from "umi";
export const useNavData = () => {
// 获取全局路由信息
const { routes } = useAppData();
// 获取/docs下的路由信息
const localeDocRoutes: any[] =
Object.values(routes).filter(route => route.parentId === 'DocLayout')
// 获取导航信息
const nav: any = []
Object.values(localeDocRoutes).forEach(route => {
const _r = { ...route }
if(_r.path == '/') {
nav.push({
title: '首页',
link: '/',
})
} else {
nav.push({
title: route.path,
link: '/' + route.path,
})
}
})
return nav;
};
Layout中使用
// /class="lazy" data-src/client/theme-default/layouts/DocLayout.ts
import { Link, Outlet } from 'umi';
import { useNavData } from '@/client/theme-api/useNavData';
import styles from './index.less';
export default function Layout() {
const nav = useNavData()
return (
<div className={styles.navs}>
<ul>
{nav.map((item: any) => (<li key={item.link}>
<Link style={{ marginRight: '10px' }} to={item.link}>{item.title}</Link>
</li>))}
</ul>
<Outlet />
</div>
);
}
以上就是umi插件开发仿dumi项目自动生成导航栏实现详解的详细内容,更多关于umi插件自动生成导航栏的资料请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341