react代码的一些优化(自己代码记录)

优化一

  const checkDraftBuildDeviceItem = async (query, item) => {
    await apis.checkDraftBuildDeviceItem(query).then((res) => {
      setIsEditProject(false)
      if (res.code == 101) {
        item._itemsImperfect = false
        item._buildImperfect = false
        item._deviceImperfect = false
        item._itemsText = ''
        item._buildText = ''
        item._deviceText = ''
      }
    }).catch((err) => {
      // 由于种种原因,code只能在catch中被捕获了,可能原因是ajax封装的时候没有定义230,231,232这几个code
      //然后就拦截了
      console.log(err, 'err')
      const { response } = err
      let _arr = Object.keys(response)
      if (!_arr.length) return
      const { code, data, msg } = response
      if (code == 230) {
        // 项目位置报问题
        setIsEditProject(true)
        item._itemsImperfect = true
        item._buildImperfect = false
        item._deviceImperfect = false
        item._itemsText = data
      } else if (code == 231) {
        setIsEditProject(false)
        // 大楼位置报问题
        item._itemsImperfect = false
        item._buildImperfect = true
        item._deviceImperfect = false
        item._buildText = data
      } else if (code == 232) {
         // 设备信息报问题
        setIsEditProject(false)
        item._itemsImperfect = false
        item._buildImperfect = false
        item._deviceImperfect = true
        item._deviceText = data
      }
    })
    return item
  }

这样写有很多重复的,另外一种写法看起来更清爽,用了 try catch 进行捕获,加上async await 来执行同步,加上Object.assign(target,source,…)来改变将source的值赋值到target中。

 const checkDraftBuildDeviceItem = async (query, item) => {
    try {
      // await同步数据
      const res = await apis.checkDraftBuildDeviceItem(query)
      const { code } = res
      const isCode101 = code === 101
      setIsEditProject(!isCode101)

      if (isCode101) {
        item._itemsImperfect = false
        item._buildImperfect = false
        item._deviceImperfect = false
        item._itemsText = ''
        item._buildText = ''
        item._deviceText = ''
      }
    } catch (err) {
      console.log(err, 'err')
      const { data, msg, code } = err.response
      if (code == 230) {
        setIsEditProject(true)
        // 将后面的值赋值给item,这样item就改变了。
        Object.assign(item, { _itemsImperfect: true, _buildImperfect: false, _deviceImperfect: false, _itemsText: data })
        // 假设给 let a =  Object.assign(item, { _itemsImperfect: true, _buildImperfect: false, _deviceImperfect: false, _itemsText: data })
        // 那么 console.log(a === item) --- 打印出来为true
      } else if (code == 231) {
        setIsEditProject(false)
        Object.assign(item, { _itemsImperfect: false, _buildImperfect: true, _deviceImperfect: false, _buildText: data })
      } else if (code == 232) {
        setIsEditProject(false)
        Object.assign(item, { _itemsImperfect: false, _buildImperfect: false, _deviceImperfect: true, _deviceText: data })
      }
    }
    return item
  }

优化二

 deviceInfoList?.list?.map((itemTwo) => {
      changedSelectRows.map((itemChildren) => {
        if (itemTwo._id == itemChildren._id) {
          itemTwo._itemsImperfect = itemChildren._itemsImperfect
          itemTwo._buildImperfect = itemChildren._buildImperfect
          itemTwo._deviceImperfect = itemChildren._deviceImperfect
          itemTwo._deviceText = itemChildren._deviceText
          itemTwo._buildText = itemChildren._buildText
          itemTwo._itemsText = itemChildren._itemsText
        }
        return itemTwo
      })
      return itemTwo
    })
  • 遍历过程中可以使用 for…of 循环,而不是 .map() 方法,因为 .map() 方法会返回一个新的数组,但是在这段代码中不需要返回新的数组。
  • changedSelectRows 中的元素 _id 唯一,可以考虑把 changedSelectRows 转换成对象,以 _id 为 key
const changedSelectRowsObj = {};
for (const item of changedSelectRows) {
  // 对象的键值获取,将 changedSelectRows对应_id的值放入changedSelectRowsObj对象中
  changedSelectRowsObj[item._id] = item;
}
// 遍历元数据deviceInfoList?.list
for (const itemTwo of (deviceInfoList?.list || [])) {
  // 通过查找itemTwo._id在changedSelectRowsObj中是否存在将changedSelectRowsObj中
  //遍历出来的itemChildren进行赋值给itemTwo
  const itemChildren = changedSelectRowsObj[itemTwo._id];
  if (itemChildren) {
    itemTwo._itemsImperfect = itemChildren._itemsImperfect;
    itemTwo._buildImperfect = itemChildren._buildImperfect;
    itemTwo._deviceImperfect = itemChildren._deviceImperfect;
    itemTwo._deviceText = itemChildren._deviceText;
    itemTwo._buildText = itemChildren._buildText;
    itemTwo._itemsText = itemChildren._itemsText;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只夏宇坤

你的鼓励是我持续创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值