前端 10 年经验常用的接口各种数据类型容错写法

前端 10 年经验常用的接口各种数据类型容错写法,保证前端页面不炸掉

今天一个下拉框渲染,接口返回了[null, null, null]导致页面崩了

<el-select

  v-model="currentEditRow.approverNumbers"

  placeholder="请选择"

  clearable

  style="width:100%"

  @change="approverNumbersChange"

>

  <el-option

    v-for="item in safeNodeList"

    :key="item.approverNumber"

    :label="item.approverName"

    :value="item.approverNumber"

  />

</el-select>

解决办法: this.nodeList = (res.data || []).filter(Boolean)

最保险写法:

const formatNodeList = list =>

  (Array.isArray(list) ? list : [])

    .filter(Boolean)

    .map(item => ({

      approverName: item.approverName || '',

      approverNumber: item.approverNumber || ''

    }))

借此机会就梳理一下各种数据类型的兜底写法

1、数组类型兜底

接口可能返回null、undefined、{}、[null, null]

兜底写法:this.nodeList = Array.isArray(res.nodeList) ? res.nodeList.filter(Boolean) : []

2、对象类型兜底

接口可能返回null、undefined

兜底写法:this.detail = res.detail || {}

3、 对象内字段类型兜底

接口可能返回防止 undefined

兜底写法:const name = res.name || ''

4、可以写在公共方法里的两个兜底方法

export const safeArray = (arr = []) => Array.isArray(arr) ? arr.filter(Boolean) : []

export const safeObject = (obj = {}) => obj || {}

使用方法:

this.nodeList = safeArray(res.nodeList)

this.detail = safeObject(res.detail)

5、一定要记住,接口数据永远不要直接用,一定先:

接口返回 → 数据清洗 → 页面使用

基本思路:

数组 → safeArray

对象 → safeObject

字段 → || 默认值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容