Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 「开发日志」在Vue3中如何为路由Query参数标注类型

「开发日志」在Vue3中如何为路由Query参数标注类型

Eswlnk的头像
Eswlnk
2024-08-05 22:31:51
「开发日志」在Vue3中如何为路由Query参数标注类型-Eswlnk Blog
智能摘要 AI
Zova框架在Vue3中引入IOC容器,通过对比Composable和IOC容器在处理路由Query参数时的代码风格,展示了IOC容器的优势。IOC容器通过定义与使用的分离,简化了代码书写,提供了明确的类型约束和智能提示,避免了手动处理缺省值和类型转换的繁琐操作,提升了开发效率和代码可维护性。

前言

最近发布了一款支持IOC容器的Vue3框架:Zova。与以往的OOP或者Class方案不同,Zova在界面交互层面仍然采用Setup语法,仅仅在业务层面引入IOC容器。IOC容器犹如一把钥匙,为我们打开了业务工程化的大门,允许我们探索更多工程化方面的设计和能力。有网友提出一个非常好的建议:可否提供一些业务场景,说明有哪些是Class可做而Composable做不了的,这样才更有说服力。

首先说明一点,其实没有哪些业务需求是这个能做而那个不能做的。不同的编程范式带来的是不同的代码风格,不同的编程体验,从不同的路径指向开发效率和代码可维护性方面的评估。因此,最终根据用户自身的偏好和业务实际需求而定。

那么,在这里,我们就针对这个话题如何为路由Query参数标注类型为例,看看Composable和IOC容器的代码风格究竟有什么不同。

「开发日志」在Vue3中如何为路由Query参数标注类型-Eswlnk Blog

需求说明

这里有一个页面组件User,可以通过Query传递三个参数:

参数名类型缺省值
idnumber0
namestring”
marriedbooleanfalse

Composable:原生

1. 访问页面

const router = useRouter();
router.push({
  path: '/test/demo/user',
  query: {
    id: 1,
    name: 'kevin',
    married: false.toString(),
  },
});

从Typescript类型的角度来看,这段代码有以下两个问题:

  1. path:没有类型约束和智能提示。这会存在以下三个隐患:
    1. 记不住:如果路径较长,或者单词较复杂,就记不住路径,需要从源文件查找
    2. 写错了:如果不小心写错了,没有提示,只有到实际运行时才会暴露错误
    3. 被改了:如果后续维护代码时,路径有了变更,那么这里的代码同样没有提示,只有到实际运行时才会暴露错误
  2. query:只有有限的类型约束,与业务类型并不一致
    1. 比如不支持Boolean类型,必须强制转换为String类型

2. 获取参数

const route = useRoute();
const id = parseInt(route.query.id ?? 0);
const name = route.query.name ?? '';
const married = route.query.married === 'true' ? true : false;

由于没有提供类型工具,需要针对每一个参数单独处理

Composable:useRouteQuery

1. 访问页面

(同上)

2. 获取参数

import { useRouteQuery } from '@vueuse/router';

const id = useRouteQuery('id', 0, { transform: Number });
const name = useRouteQuery('name', '');
const married = useRouteQuery('married', 'false', {
  transform: value => {
    return value === 'true' ? true : false;
  },
});

IOC容器

1. 定义类型

import { zz } from 'zova';

export const QuerySchema = zz.object({
+  id: zz.number().default(0),
+  name: zz.string().default(''),
+  married: zz.boolean().default(false),
});
  • zz是在zod基础上做的加强版,特别针对路由参数做了处理,支持array数组和json对象,具体参见:Zova: zod
  • 在定义类型的同时可以指定缺省值
「开发日志」在Vue3中如何为路由Query参数标注类型-Eswlnk Blog

2. 访问页面

const url = this.$router.resolvePath('/test/demo/user', {
  id: 0,
  name: 'kevin',
  married: false,
});
this.$router.push(url);
  • resolvePath的参数都有类型约束和智能提示,并且与业务类型保持一致
「开发日志」在Vue3中如何为路由Query参数标注类型-Eswlnk Blog

3. 获取参数

const id = this.$query.id;
const name = this.$query.name;
const married = this.$query.married;
  • 直接通过this.$query获取参数值,有明确的类型,并且不需要处理缺省值
「开发日志」在Vue3中如何为路由Query参数标注类型-Eswlnk Blog

总结

从上面的示例对比可以看出,采用IOC容器,可以实现定义与使用的分离,而且定义侧可以通过工具来创建脚手架,进一步简化定义的书写。由于TS类型和缺省值等规范性代码都在定义侧完成了,那么在使用侧代码就更加简洁直观了。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
vue开发手册日志路由
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「其他分享」分享一个在Tun模式下可用的脚本
上一篇
「至臻原创」某系统网站登录功能监测
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志」IG无缘S15总决赛
  • 来自谷歌27岁的生日涂鸦
  • 科研记录:ecCodes处理grib文件问题
  • 本站上线邀请码免费兑换系统
  • 开发日志:解决Windows平台无法使用Metview解析数据的难题
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

如何用验证码(Python)识别来爆破多线程
2023-01-29 22:16:43
如何将震源球绘制在谷歌地球上
2022-06-17 17:04:00
「技术教程」免费的Let’s Encrypt证书
2024-01-11 20:20:42

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.831 秒   |  SQL查询 27 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈