前端代码优化

ops/2024/10/18 0:33:48/

嗯,最近pc更新了一版,目前没有什么活,就检查自己写的代码,去优化,发现有一个函数if嵌套了很多层,重复的代码也有很多,所以我就把重复的进行来了提取,以及一些其他优化

原代码

可以看到很多代码都重复,而且if嵌套也很多,

javascript">const handleEdit = async (data: any) => {if (data.deviceType === 'Host') {items.value = [defaultStep, ...hostSteps];editSelectType.value = 'C04A01';editDeviceType('C04A01');editCurrent.value = 1;editDataHost.value = data;oldHostData.value = deepCopy(data);if (data.sceneList.length > 0) {data.sceneList.forEach((item: any) => {selectScene(item.id, item, 'host');selectSceneHasRoom(item.id);});}} else {items.value = [defaultStep, ...editBoxSteps];editSelectType.value = 'C04A02';editDeviceType('C04A02');editCurrent.value = 1;editDataBox.value = data;initialFormData.value = deepCopy(data);initProjectHostList();initBoxProperty();initControllerType();if (data.sceneList.length > 0) {data.sceneList.forEach((item: any) => {selectScene(item.id, item, 'box');selectSceneHasRoom(item.id);});}if (data.children == null) {editDataBox.value.children = [];editBoxController();}if (editDataBox.value.children) {const res = editDataBox.value.children;console.log(res);res.forEach((chl: any) => {selectController(chl.userTypeId);if (chl.itemDeviceTypePropertyDTOList.length === 0) {chl.itemDeviceTypePropertyDTOList.push({propertyId: undefined,deviceCount: 0,});}});}}editVisible.value = true;getControllerModelList({ deviceTypeId: editDataHost.value.typeId }).then((res) => {if (res.code === 200) {controllerModelList.value = res.result;}});
};

看完这段代码,你有想到这段代码应该怎么优化,减少代码量吗?我觉得你应该有想法了吧!

这是对这段代码优化的建议

  1. 类型安全性:确保对函数和变量的参数和返回类型进行正确的类型定义。这可以在开发过程中帮助捕获错误。

  2. 避免魔术字符串:不要硬编码字符串,如 'Host''C04A01',考虑使用常量或枚举来提高可读性和可维护性。

  3. 避免重复代码:处理 sceneList 存在重复模式。您可以将此提取为单独的函数,以避免冗余。

  4. 使用 Promise.all() 进行并行请求:如果 getControllerModelList 与其他异步任务无关,可以使用 Promise.all() 并行获取数据。

  5. 错误处理:确保对承诺进行适当的错误处理,以捕获在 API 调用过程中可能出现的任何错误。

  6. 一致的命名约定:确保变量名遵循一致的命名约定,以提高可读性和可维护性。

  7. 使用解构:当访问对象的属性时,考虑使用解构来简化代码。

  8. 尽量减少副作用:像 editDeviceTypeeditBoxController 这样的函数似乎有副作用。确保这些副作用得到充分记录和控制。

这是修改优化的代码,把重复的代码都写到了setDataAndInit 这个函数,并且

const isHost = data.deviceType === 'Host'; const deviceType = isHost ? 'C04A01' : 'C04A02';使用了这俩给判断去避免魔术字符串使用

javascript">const handleEdit = async (data: any) => {const isHost = data.deviceType === 'Host';const deviceType = isHost ? 'C04A01' : 'C04A02';const setDataAndInit = () => {items.value = [defaultStep, ...(isHost ? hostSteps : editBoxSteps)];editSelectType.value = deviceType;editDeviceType(deviceType);editCurrent.value = 1;initialFormData.value = deepCopy(data);if (data.sceneList.length > 0) {data.sceneList.forEach((item: any) => {selectScene(item.id, item, isHost ? 'host' : 'box');selectSceneHasRoom(item.id);});}};if (isHost) {editDataHost.value = data;oldHostData.value = deepCopy(data);setDataAndInit();} else {editDataBox.value = data;setDataAndInit();initProjectHostList();initBoxProperty();initControllerType();if (!data.children) {editDataBox.value.children = [];editBoxController();} else {const { children } = editDataBox.value;children.forEach((chl: any) => {selectController(chl.userTypeId);if (chl.itemDeviceTypePropertyDTOList.length === 0) {chl.itemDeviceTypePropertyDTOList.push({propertyId: undefined,deviceCount: 0,});}});}}editVisible.value = true;// 获取控制器模型列表try {const res = await getControllerModelList({ deviceTypeId: editDataHost.value.typeId });if (res.code === 200) {controllerModelList.value = res.result;} else {// 处理错误}} catch (error) {// 处理错误}
};

 只是记录并分享一下,感觉没有什么技术含量,就是把重复代码提取出来了


http://www.ppmy.cn/ops/38607.html

相关文章

Linux 常用命令

💖 系统信息 top:实时显示系统进程和资源使用情况。当线上报警CPU占用率过高,load飙高的时候,我们通常会先上去使用top命令看一下具体哪些进程耗费了资源。 df:显示磁盘空间使用情况。当线上服务器报警磁盘满的时候&a…

STM32--4G DTU 及 阿里云

模块概述 ATK-IDM750C/IDM751C 是正点原子(ALIENTEK)团队开发的一款高性能 4G Cat1 DTU 产品, 支持移动 4G、联通 4G 和电信 4G 手机卡。它以高速率、低延迟和无线数传作为核心功能, 可快速解决应用场景下的无线数传方案。 它支持 TCP/UDP/HTTP/MQTT/DN…

Windows系统下修改文件夹和U盘图标实战

文章目录 知识学习一、修改磁盘图标第一步、新建.INF文件第二步、放置图标第三步、重新插入U盘第四步、隐藏与显示文件知识拓展 二、修改文件夹图标设置图标样式恢复图标样式 在日常办公中使用的是windows系统,系统默认的文件图标都一样,不利于分类整理&…

森林消防—高扬程水泵,高效、稳定、可靠!/恒峰智慧科技

森林,作为地球的“绿色肺叶”,不仅为我们提供了丰富的自然资源,更是维持生态平衡的重要一环。然而,随着全球气候的变化和人为活动的增加,森林火灾频发,给生态环境和人民生命财产安全带来了巨大威胁。在森林…

【GameFi】链游 | Seraph | 区块链上的动作角色扮演 NFT 装备收集和掠夺游戏

官网下载 新赛季公告:https://www.seraph.game/#/news/357 开始时间:2024年4月19日 11:00 (UTC8) discard会有人发送一些激活码,或者有一些活动,只需要填表格关注账号,参与了就会将激活码发到你的邮箱 …

软考网络工程师 第六章 第三部分 第二节 TCP三次握手

TCP三次握手建立连接 TCP四次挥手断开连接 主机甲向主机已发送一个TCP报文段,SYN字段为"1".,序列号字段的值为2000,若主机乙同意建立连接,则发送给主角甲的报文段可能为(A)若主机乙不同意建立连接&#xff0…

接口测试及常用的接口测试工具(Postman/Jmeter)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接…