老师,把productList定义在计算属性之前,计算属性直接使用productList并不能监听到productList的变化,为什么

来源:11-9 全选及清空购物车的功能实现(1)

throwError_

2023-06-17

老师您好,请看代码
当我把 const productList = cartList[shopId]写到计算属性外面,在计算属性里直接用productList时,清空购物车有bug

const productList = cartList[shopId]
const list = computed(() => {
// 直接返回productList清空购物车时Cart没反应,页面倒是清空了,返回cartList[shopId]就可以
// return productList
return cartList[shopId]
})
productList不是响应式数据吗,把cartList[shopId]变成空对象后,购物车为啥不变啊。

补充提问
在写购物车全选时出现类似问题,当我把 const productList = cartList[shopId]写到计算属性外面,计算属性里直接用productList就不奏效了。须得在计算属性里面获取productList,但这不是响应式数据吗。
//const productList = cartList[shopId]
const allChecked = computed(() => {
let result = true
// ***为什么外面写好productList不奏效,得在里面获取productList才会正常工作
const productList = cartList[shopId]
if (productList) {
for (const i in productList) {
const product = productList[i]
if (!product.check) {
result = false
}
}
}
console.log(result)
return result
})

写回答

1回答

Dell

2023-06-23

return productList ,你直接从对象里拿一个属性,这时候这个属性不是响应式的,跟 vue 底层实现有关系。list 响应式是建立在了 cartList 对象的 proxy 代理上,你直接拿出来用,代理没了,响应式就没了。

0
0

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程