前端代码优化

嗯,最近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) {
    // 处理错误
  }
};

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

相关推荐
金灰几秒前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5
茶卡盐佑星_3 分钟前
说说你对es6中promise的理解?
前端·ecmascript·es6
爱上语文4 分钟前
Java LeetCode每日一题
java·开发语言·leetcode
Манго нектар31 分钟前
JavaScript for循环语句
开发语言·前端·javascript
蒲公英100139 分钟前
vue3学习:axios输入城市名称查询该城市天气
前端·vue.js·学习
程序猿小D40 分钟前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
阿华的代码王国1 小时前
【JavaEE】——文件IO的应用
开发语言·python
satan–01 小时前
R语言的下载、安装及环境配置(Rstudio&VSCode)
开发语言·windows·vscode·r语言
天涯学馆1 小时前
Deno与Secure TypeScript:安全的后端开发
前端·typescript·deno
以对_1 小时前
uview表单校验不生效问题
前端·uni-app