vue:Cannot read property ‘xxx’ of undefined 出现原因

原因:

vue通过键名获取对象中的值,使用 . 级联显示数据,控制台报如下错误:
在这里插入图片描述
代码如下:

<div>
	<span>{{com_List.title}}</span>
</div>

<script>
	export default {
	   data(){
	   		List:[]
	   },
	    computed:{
          com_List:function(){
	          for(var i=0;i < this.List.length;i++){
	            if (this.List[i].id = this.id){
	              return( this.List[i])
	            }
          }
      }
    },
    },
</script>

-------------------------------------------------2020/10/25更新------------------------------------------------------

再一次遇到这个问题,对这个原因也有了更深刻的理解

我在created里初始化了数据,接着我把数据通过computed计算后返回,在页面通过插值表达式使用

通过打印我发现computed执行了两次,第一次是undefined,第二次才被赋值,所以可以知道computed是在created之前执行

第一次执行computed初始化的时候,created还未执行,所以sayObj是空值,计算结果返回undefined
接着created执行并给sayObj赋值,所以computed又执行了一次,这次计算属性才返回正确的值

<p v-if="diaryInfo!= undefined">{{diaryInfo.date}}</p>

  data () {
    return {
      sayObj: [],
    }
  },
  created () {
    this.axios.get('./redeme.json').then((res) => {
      this.sayObj = res.data.data
    })
  },
  computed: {
    diaryInfo: function () {
      return this.sayObj[0]
    }
   }

解决方法1:

判断值是否存在,若不存在则不渲染

<div v-if="com_List">
	<span>{{com_List.title}}</span>
</div>

解决方法2:

先将值初始化为空,这样就不会报未定义(undefined)的错误

data(){
    return {
        List: {
            title: {}
        }
    }
}

解决方法3:

养成良好的判空习惯,可以使用可选链(?.)处理数据

<div v-if="com_List">
	<span>{{com_List?.title}}</span>
</div>

或者,如果返回值为假值(null、undefined、false、0)则返回一个符合预期类型的数据

 diaryInfo: function () {
   return this.sayObj?.[0] || {}
  }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
"TypeError: Cannot read property 'find' of undefined" 是一个常见的错误,它表示在代码中尝试读取一个 undefined 的属性 'find',而 'find' 属性是 undefined 的。这种错误通常发生在你尝试访问一个对象或数组的属性或方法时,但该对象或数组为 undefined。 有几个常见的原因可能导致这个错误: 1. 你可能没有正确地定义或初始化对象或数组。请确保在尝试访问属性或方法之前,对象或数组已经被正确地创建并赋值。 2. 你可能没有正确地引入或使用所需的库或依赖项。请确保在使用特定的属性或方法之前,你已经正确地导入了相关的库或依赖项,并且它们已经正确地初始化。 3. 你可能没有正确地处理异步操作或回调函数。在使用异步操作或回调函数时,确保在获取结果之前,相关的对象或数组已经被正确地初始化或赋值。 为了解决这个错误,你可以尝试以下几种方法: 1. 检查你的代码,确保对象或数组在使用之前已经被正确地定义和赋值。 2. 检查你的代码,确保你已经正确地引入了所需的库或依赖项,并且它们已经被正确地初始化。 3. 如果涉及到异步操作或回调函数,确保在使用结果之前,相关的对象或数组已经被正确地初始化或赋值。 4. 如果这个错误是在 Vue.js 的项目中出现的,可以检查你的模板或组件中是否正确地绑定了数据。 综上所述,"TypeError: Cannot read property 'find' of undefined" 错误通常是由于对象或数组未被正确地定义、初始化或引入相关的库或依赖项导致的。请仔细检查你的代码,并根据具体情况采取相应的解决方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [前端解决 “TypeError: Cannot read properties of undefined (reading ‘xxx‘)的多种情况](https://blog.csdn.net/sunwenpinglike/article/details/129690571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Vue打包Cannot read property 'tapPromise' of undefined报错处理.docx](https://download.csdn.net/download/rongbo91/77070400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值