❗注意: 在vscode extension marketplace
中该文档会存在图片和链接不能查看的情况,请前往github或gitee进行阅读
sagaroute-vscode
是一款约定式路由管理插件,除了快速生成约定式路由,还支持在编码过程中对路由的智能提示、快速定位、诊断、高亮显示等功能。运行效果可看以下展示:
ES6 Module
格式,适用于任何开发环境url
跳转到路由对应的组件文件从vscode
的EXTENSTIONS: MARKETPLACE
中下载,如下所示👇:
下载sagaroute-vscode
后会发现Vscode
右下角的状态栏出现了一个如下的控件:
sagaroute-vscode
在每个项目中是默认不开启监听工作的,需要开发者手动点击上面 👆 的控件切换监听状态,当开启监听后控件会如下所示
路由模板文件是指要被注入路由列表的文件,我们需要通过注释来指明路由模板文件中哪个位置被注入路由列表和依赖
例如存在路由模板文件,其内容如下:
import React from 'react';
const routes = [];
const router = createBrowserRouter(routes);
export default router;
我们需要对上述文件用注释进行标记,标记后如下所示:
import React from 'react';
import { createBrowserRouter } from 'react-router-dom';
/* sagaroute-inject:imports */
/* sagaroute-inject:routes */
const routes = [];
const router = createBrowserRouter(routes);
export default router;
其中/* sagaroute-inject:imports */
用于标记依赖注入的位置,/* sagaroute-inject:routes */
用于标记路由列表注入的位置。关于这些注释的含义和路由模板文件的更多说明可看此处
sagaroute-vscode
会监听页面文件目录里的文件,当更改的文件CRTL+S
保存时开始执行生成路由,同时你也可以使用命令要求本插件开始生成路由,即(CMD/CTRL + Shift + P)唤出命令面板后输入Sagaroute: routing
,如下 👇 所示:
你可以在组件的routeProps
字段中设置属性,routeProps
上的所有属性会复制到注册路由上:
假如存在src/pages/users.tsx
文件,其文件内容如下所示:
import ErrorBoundary from '@/components/ErrorBoundary';
export default function Users() {
return <div>Users...</div>;
}
// 设置routeProps
/** @type {import('react-router-dom').RouteObject} */
Users.routeProps = {
caseSensitive: false,
ErrorBoundary: ErrorBoundary,
};
生成的注册路由如下所示:
{
path:'user',
element:<PagesUsers/>,
caseSensitive: false,
ErrorBoundary: ComponentsErrorBoundary
}
可看以下效果图:
routeProps
属性的设置值支持任意类型,不过要遵循编码规则,详情请看此处
sagaroute
中支持指定的配置项如下所示:
配置项中所有参数的简要说明如下所示:
名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
dirpath | 页面文件目录路径 | string | 'src/pages' |
layoutDirPath | 全局路由目录路径 | string | 'src/layouts' |
routeFilePath | 指定路由模板文件的路径 | string | 'src/route.tsx' |
lazy | 路由是否懒加载 | boolean/Function(string): boolean | false |
hooks | 执行周期的钩子函数 | object | -- |
pathRewrite | 用于对 import 语句的路径进行替换 | Object{string: string} | -- |
rootPath | 项目路径 | string | process.cwd() |
onWarning | 触发警告时的回调函数 | function(message: string): void | -- |
注意❗:在该插件中,hooks
的print.write.after
不会被执行。
对上述配置参数中更详细的说明可看API
往项目中添加sagaroute.config.js
或sagaroute.config.cjs
作为配置文件,在文件中以CommonJS
的格式编写和导出部分上述配置项,例如:
/** @type {import('@sagaroute/react').RoutingOption} */
module.exports = {
// 指定页面文件目录
dirpath: 'src/views',
// 指定路由模板文件
routeFilePath: 'src/router/index.jsx',
};
sagaroute-vscode
提供了以下命令,可通过(CMD/CTRL + Shift + P)唤出命令面板后输入使用:
Sagaroute: routing
: 生成路由列表,若存在缓存,则无视缓存重新构建Sagaroute: rebuild
: 重新根据配置文件构建配置,并执行生成路由列表的操作Sagaroute: show
: 打开sagaroute-vscode
的output
输出面板Sagaroute: parse
: 用于根据url
快速定位文件,详情请看高级特性-通过url快速定位文件.vscode/settings.json
中的设置sagaroute.working
: 决定sagaroute-vscode
是否开启监听路由文件目录的变化以动态生成约定式路由列表,如下所示:
{
// true代表开启监控
"sagaroute.working": true
}
sagaroute.decoration
: 决定路由高亮的样式,详细可看路由高亮
在vscode
底部的状态栏中会有sagaroute-vscode
的状态控件,以显示sagaroute-vscode
是否处于监听路由文件目录中。如下所示:
你也可以通过点击该状态控件来切换监听状态。监听状态会同步到.vscode/settings.json
的sagaroute.working
变量中
答:是的。sagaroute-vscode
支持批量生成lazy
路由
lazy
是react-router@6.4
新增的路由属性,用于路由文件的懒加载,lazy
有多种写法,如下所示:
[
// 写法1: 只对路由文件进行懒加载
{
path: 'projects',
loader: ({ request }) => fetchDataForUrl(request.url),
lazy: () => import('./projects'),
},
// 写法2: 对路由文件及其路由属性变量进行懒加载
{
path: 'messages',
async lazy() {
let { messagesLoader, Messages } = await import('./pages/Dashboard');
return {
loader: messagesLoader,
Component: Messages,
};
},
},
];
本插件可以通过设置lazy
配置项统一生成上述 👆 第 2 种写法的lazy
路由,如下 👇 效果图:
答:不一定。
本插件内部实现了路由对象的缓存机制,因此存在以下优点:
可看以下👇效果图:
若要无视缓存强制生成路由列表,则可使用Sagaroute: routing
命令
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。