Vue3数组更新问题和props的正确使用

文章描述了一个在Vue.js中使用v-for循环渲染子组件时遇到的问题,即通过splice方法更新数组后,子组件内容未更新。问题根源在于子组件中对props使用了ref而非toRef,导致失去响应性。解决方案是直接使用props的值或使用toRef来保持响应性。
摘要由CSDN通过智能技术生成

1. 问题:

在父组件中有一个v-for循环创建子组件,类似于手机应用商店的场景。每次从后台返回数据后,通过比较数据的差异看是否需要更新。如需要则使用splice方法,如下父组件示例:

<div v-for="item in list">
    <subC :itemdata="item"></subC>
</div>

list = ref([]);
newList = await getData();
update(list, newList);
function update(oldList, newList) {
    // 循环判断每个元素是否需要更新,需要使用splice先删除,在插入新元素
        list.splice(i, 1, item);
}

由于oldList是数组,引用类型,可以直接修改值,这个做法应该是没问题的。

但是实际发现,列表内容始终不更新,在网上找了各种资料,都说splice是可用的,到底是什么问题呢?
当我看到子组件里写的一行代码时,我意识到问题真正的原因

const itemdataProp = ref(props, 'itemdata');

因为子组件里面没有对父组件的prop直接使用,而是用ref套了一层,导致子组件没有响应式了。

2. 修改:

1. 不用对props的值重新复制,可以直接使用props.itemdata
2. 使用toRef而不是ref接收props的值,即
    const itemdataProp = toRef(props, 'itemdata');
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值