想return数据 返回的确是函数问题处理

文章目录


事情是这样的

今天写页面,想显示个协议类型,写了个函数:

javascript 复制代码
const getProtocol = () => {
  if (type == 1) return "协议A";
  if (type == 2) return "协议B";
  if (type == 3) return "协议C";
};

然后页面上这么用:

html 复制代码
<span>协议类型:{getProtocol}</span>

结果页面出来这么个玩意:

复制代码
协议类型:() => { if (type == 1) return "协议A"; if (type == 2) return "协议B"; if (type == 3) return "协议C"; }

问题出在哪

忘了加括号

getProtocol 是函数本身,getProtocol() 才是调用它。

我写的是 {getProtocol},等于把整个函数的源码扔页面上了。

改成 {getProtocol()} 就好了。

顺便修了另外两个坑

原来的代码还有两个隐患:

1. 没考虑空值

万一 type 不存在,函数就返回 undefined,页面显示空白。

加了个默认值:

javascript 复制代码
const getProtocol = () => {
  if (type == 1) return "协议A";
  if (type == 2) return "协议B";
  if (type == 3) return "协议C";
  return "未知协议";  // 兜底
};

2. 数据取法不安全

原代码写了 items!.protocolType,要是 items 是空的直接就崩了。

改成 items?.protocolType,安全一点。

最终代码

javascript 复制代码
const getProtocol = () => {
  const type = data?.form?.items?.protocolType;
  if (type === 1) return "协议A";
  if (type === 2) return "协议B";
  if (type === 3) return "协议C";
  return "未知协议";
};

页面调用:

html 复制代码
<span>协议类型:{getProtocol()}</span>

一个更清爽的写法

其实这种映射关系,用对象比 if 好看:

javascript 复制代码
const getProtocol = () => {
  const type = data?.form?.items?.protocolType;
  const map = {
    1: "协议A",
    2: "协议B",
    3: "协议C"
  };
  return map[type] || "未知协议";
};

您好,我是肥晨。

欢迎关注我获取前端/AI学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

相关推荐
A黄俊辉A2 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
honkun62 天前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs19912 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
雪芽蓝域zzs2 天前
第26章:ECharts 自定义主题 + 页面一键切换主题(深色 / 浅色两套)
vue.js·echars
雪芽蓝域zzs2 天前
第22章:ECharts 图表联动(多图表交互联动)
vue.js·echars
daols882 天前
vue 表格组件 vxe-table 实现虚拟滚动与无需滚动加载
vue.js·vxe-table
雪芽蓝域zzs2 天前
第18章:ECharts 折线图 + 标记点、标记线,自定义 tooltip
vue.js·echars
雪芽蓝域zzs2 天前
第24章:ECharts 地图组件(基础行政区地图,若依 Vue3)
vue.js·echars
计算机毕设定制辅导-无忧学长2 天前
《基于Vue的流浪动物救助中心管理系统的设计与实现》
java·vue.js·spring boot·流浪动物救助中心管理系统
雪芽蓝域zzs2 天前
第25章:地图下钻交互(点击省份,切换到对应省份城市地图)
vue.js·echars