前面我们已经完成了页面布局和页面路由,现在我们的导航栏还是自己写死在代码中,现在我们来改造成自动根据页面路由来生成导航栏。
获取路由信息
我们在前面创建的路由对象,会被umi
存入appData
对象中,umi
提供了useAppData
API可以用于获取路由信息。
创建获取导航数据hook
// /src/client/theme-api/useNavData.ts
import { useAppData } from "umi";
/**
* hook for get nav data
*/
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中使用
// /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>
);
}
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。
在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。
本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。
除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。
在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!
// /src/client/theme-api/useNavData.ts
import { useAppData } from "umi";
/**
* hook for get nav data
*/
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;
};
// /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>
);
}
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。
在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。
本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。
除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。
在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!