前端代码优化

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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代