看到if else很多就很烦

多个 if else分支优化

请看下面代码

js 复制代码
if (row.tianrunStatus == true) {
  if (row.tianrunSyncStatus == 'APPLYING') {
    return '启用(申请中)'
  } else if (row.tianrunSyncStatus == 'APPLY_FAILURE') {
    return '启用(申请失败)'
  } else if (row.tianrunSyncStatus == 'APPLY_SUCCESS') {
    return '启用(申请成功)'
  } else if (row.tianrunSyncStatus == 'SYNCHRONIZING') {
    return '启用(同步中)'
  } else if (row.tianrunSyncStatus == 'SYNC_SUCCEEDED') {
    return '启用(同步成功)'
  } else if (row.tianrunSyncStatus == 'SYNC_FAILED') {
    return '启用(同步失败)'
  } else {
    return '启用'
  }
} else if (row.tianrunStatus == false) {
  if (row.tianrunSyncStatus == 'SYNCHRONIZING') {
    return '禁用(同步中)'
  } else if (row.tianrunSyncStatus == 'SYNC_SUCCEEDED') {
    return '禁用(同步成功)'
  } else if (row.tianrunSyncStatus == 'SYNC_FAILED') {
    return '禁用(同步失败)'
  } else {
    return '禁用'
  }
} else {
  return '--'
}

这让我看着都头大,连吐三口老血啊,并且这段类似代码在同一个文件内用了三次!

js 复制代码
const enableStateTypeMap = {
  'APPLYING': '启用(申请中)',
  'APPLY_FAILURE': '启用(申请失败)',
  'APPLY_SUCCESS': '启用(申请成功)',
  'SYNCHRONIZING': '启用(同步中)',
  'SYNC_SUCCEEDED': '启用(同步成功)',
  'SYNC_FAILED': '启用(同步失败)',
}

const disabledStateTypeMap = {
  'SYNCHRONIZING': '禁用(同步中)',
  'SYNC_SUCCEEDED': '禁用(同步成功)',
  'SYNC_FAILED': '禁用(同步失败)',
}
/** 状态code判断返回中文描述 */
export const statusJudgmentFun = (status, syncStatus) => {
  if (status == true) {
    const syncStatusText = enableStateTypeMap[syncStatus]
    return syncStatusText ? syncStatusText : '启用'
  } else if (status == false) {
    const syncStatusText = disabledStateTypeMap[syncStatus]
    return syncStatusText ? syncStatusText : '禁用'
  } else {
    return '--'
  }
}
/** 使用 */
statusJudgmentFun(row.tianrunStatus,row.tianrunSyncStatus)

多个if判断请求接口

直接上代码

js 复制代码
const onOk = (val, editType) => {
  const { selectedRowKeys, tianrunEditVisible, ronglianEditVisible,duyanEditVisible, selectedRows,editRow, freeswitchEditVisible } = this.state;
  const tianrunStatus = val.tianrunStatus || false;
  const ronglianStatus = val.ronglianStatus || false;
  const freeswitchStatus = val.freeswitchStatus || false;
  const duyanStatus = vel.duyanStatus || false;
  const fn =() =>{
      this.modalVisible('editVisible', false);
      this.handleSearch({...this.state.filter});
  }
  if (tianrunEditVisible) {
      if (editType == 'batchEdit') {
          this.doBatchChange(selectedRows, tianrunStatus,'CTI_SOFT_PHONE').then(fn);
      } else {
          this.doBatchChange([editRow],tianrunStatus,'CTI_SOFT_PHONE').then(fn);
      }
  }
  if (ronglianEditVisible) {
      if (editType == 'batchEdit') {
          this.doBatchChange(selectedRows, ronglianStatus,'RONGLIAN').then(fn);
      } else {
          this.doBatchChange([editRow], ronglianStatus,'RONGLIAN').then(fn);
      }
  }
  if (freeswitchEditVisible) {
      if (editType == 'batchEdit') {
          this.doBatchChange(selectedRows, freeswitchStatus,'FREESWITCH').then(fn);
      } else {
          this.doBatchChange([editRow],freeswitchStatus,'FREESWITCH').then(fn);
      }
  }
  if (duyanEditVisible) {
      if (editType == 'batchEdit') {
          this.doBatchChange(selectedRows, duyanStatus,'DUYAN').then(fn);
      } else {
          this.doBatchChange([editRow],duyanStatus,'DUYAN').then(fn);
      }
  }
}
  • 先把所有相同的代码提取出来,放在一个新的方法里面;
  • 将这些重复的逻辑抽象成一个公共的方法,使其能够适用于多种场景;
  • 使用条件判断语句来调用不同的方法,这样可以提高代码的可读性和可维护性。
js 复制代码
  const onOk = (params, editType) => {
      const { filter } = this.state;
      const list = getParamsList(this.state,params,editType)
      Promise.allSettled(list.map(item => this.props.batchChangeSeatStatus(item))).then(res=>{
        if(res.some(item=> item.status == 'fulfilled')){
             this.modalVisible('editVisible', false);
             this.handleSearch({...filter});
        }
      })
    }

export const getParamsList= (state={},params={},editType)=>{
  const { selectedRows,editRow,tianrunEditVisible, ronglianEditVisible,duyanEditVisible, freeswitchEditVisible } = state;
  const { tianrunStatus,ronglianStatus,freeswitchStatus,duyanStatus } = params
  const seatInfos = editType == 'batchEdit' ? selectedRows : [editRow]
  const TIANRUN = {
    visible:tianrunEditVisible,
    status: !!tianrunStatus,
    platform:'CTI_SOFT_PHONE',
    seatInfos
  }
  const RONGLIAN = {
    visible:ronglianEditVisible,
    status:!!ronglianStatus,
    platform:'RONGLIAN',
    seatInfos
  }
  const FREESWITCH = {
    visible:freeswitchEditVisible,
    status: !!freeswitchStatus,
    platform:'FREESWITCH',
    seatInfos
  }
  const DUYAN = {
    visible: duyanEditVisible,
    status: !!duyanStatus,
    platform:'DUYAN',
    seatInfos
  }
    const list = [TIANRUN,RONGLIAN,FREESWITCH,DUYAN].filter(item=> item.visible)
  return list
}
相关推荐
linux_cfan5 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen5 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理6 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒7 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche15007 小时前
利用 RAG 为答疑机器人扩展知识范围
前端
天若有情6737 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
SoonITer7 小时前
怎样构建一个 Agent-friendly 的网站
前端·agent
颜进强7 小时前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程
wendZzoo7 小时前
前端工程师的 3D 第一课:一个模型如何进入网页
前端
颜进强7 小时前
04 · NestJS 依赖注入:你在 `@Module` 写的 providers,和构造参数里那个类型,是怎么"对上"的?
前端·后端·ai编程