老师,把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 代理上,你直接拿出来用,代理没了,响应式就没了。
00
相似问题