vue出现Error in render: “TypeError: Cannot read properties of undefined (reading ‘id‘)“的原因

在学习Vue组件化时,遇到一个错误:"TypeError: Cannot read properties of undefined (reading 'id')"。该错误发生在尝试在没有数据的情况下访问TodoItem组件的id属性。问题源于在App组件中直接调用了TodoItem,而TodoItem应该通过TodoList从父组件接收数据。解决方案是删除App组件中直接引用TodoItem的内容,让TodoList负责数据传递和组件渲染。

学习Vue框架的时候,遇到这个报错:

在这里插入图片描述

案例:记事本 (1.0版本)

1. 模型:
在这里插入图片描述
在这里插入图片描述
2. 初始版本
在这里插入图片描述

      学习Vue组件化的时候,有一个知识点是状态提升,当兄弟组件之间要进行通信的时候,有要操作的相关的数据的时候,将这些数据提升到共同的父容器中,以便进行操作。
      当在 TodoInput 组件里面新增数据的时候,需要如图所示,经过App.vue这个父容器才能成功传递数据:
在这里插入图片描述
      而这样传递,数据可以传递成功,但是TodoItem 组件不知道在何时才接收数据并创建新的组件,因为方法需要调用才能执行,而这样直接传送数据过来没办法触发事件就不能调用方法,就达不到新增数据的效果。
      所以要进行状态提升,将原本存储在TodoList 组件里面用于渲染TodoItem组件的数据提升到App组件中,这样TodoInput 可以直接将数据传递到App.vue中进行存储,TodoList 组件利用props从App组件中读取数据,TodoItem从TodoList中读取数据进行渲染。

3. 所遇问题
      报错说TodoItem组件中找不到 id这个属性(其实下面的title 和completed 属性都找不到,只是从 id 开始报错)。

    TodoItem.vue:
在这里插入图片描述
既然找不到,当前接收数据的内容没有什么问题,就往前回溯,是否数据传输正确
在这里插入图片描述
仍旧没问题,再往前滚:
问题就出在这里,在父容器中直接调用了TodoItem组件,而TodoItem组件是在TodoList组件中,获取到数据后再进行渲染。而一开始TodoItem组件里面本来就没有数据,肯定找不到各种属性。
在这里插入图片描述
将App容器中将TodoItem组件的内容删掉就不会报错了:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值