上一章我们已经完成/docs目录下文件自动生路由功能,本章我们将在此基础上,实现自动生成页面导航的功能。 使用默认模板提供的layout展示路由切换 使用自定义主题插件 使用默认项
上一章我们已经完成/docs目录下文件自动生路由功能,本章我们将在此基础上,实现自动生成页面导航的功能。
使用默认项目提供的layout文件在我们创建默认umi项目后,会在/src/layouts下生成一个布局文件: 同时在上一章节我们打印modifyRouteshook的入参,可以看到umi会将该文件转成一个layout router对象,如图所示: 因此我们可以直接将这个layout的id属性,赋值到自动生成的路由的parentId属性上,并添加该对象到返回值中:
同时我们修改布局文件,将导航改成我们的测试页面路由:
运行项目可以看到布局文件已添加到页面中,并可以切换路由: 自定义主题上面我们通过最简单的方式使用了默认提供的布局文件,这种方式对页面局限性比较大,由于各个项目对页面的展示要求不一样,dumi提供了主题插件来灵活扩展用户自定义布局。同时提供了默认主题,用户可以选择性覆盖默认样式。 本节我们将实现其中的默认主题加载 准备工作创建主题插件,并注册到插件配置中
创建默认主题目录,将/src/layouts/index.tsx文件复制到这里
然后/src/layouts就没用了,可以删掉 主题插件功能dumi主题插件主要提供的功能有:
本章我们将实现默认布局的加载,并配置到路由中。 modifyAppDataumi提供modifyAppData钩子,用于初始收集应用数据,在dumi中使用这个钩子来初始化主题数据。 我们在主题插件中提供的主题数据后续会被用在修改路由中,即在modifyRoutes阶段使用。因为modifyRoutes是在appData插件的modifyAppData阶段中执行,所以通过before: 'appData让主题插件的modifyAppData在appData插件的modifyAppData之前先初始化完成,这样在modifyRoutes中就可以使用到主题数据。 插件代码
另一个比较不优雅的地方是这里使用了api.service来存储生成的主题数据,同样因为上面提到的阶段问题,modifyRoutes是在modifyAppData中执行,所以这里只能用全局变量来存储,否则在修改路由阶段拿不到这里的数据。 执行完成后,api.service.themeData就得到了主题相关的数据:
生成layout路由对象前面我们使用了模板自带的对象@@/global-layout作为布局模板,现在我们可以将它改成动态添加主题布局。 我们直接在路由插件中使用主题插件中生成的布局数据,代码很简单,根据前面的layout来生成一个布局路由,并添加到返回值中即可,这样所有parentId为DocLayout.specifier的页面就能使用该布局了。
使用同步伪代码来描述上面流程
运行检查至此我们已经完成生成默认布局,实现了简易的主题插件,运行代码可以看到和上节运行结果一样: 路由和页面问题基本解决了,接下来就要开始正式解析markdown文件。 |
2021-06-04
2019-01-10
2019-02-17
2021-09-12
2021-09-30