前端代码优化

2024-05-09 22:44

本文主要是介绍前端代码优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

原代码

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

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';使用了这俩给判断去避免魔术字符串使用

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.chinasem.cn/article/974709

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni