老师请问这个computed依赖的哪一个值呀?
当我把productList 从computed里面拿出来时,computed就不执行了。(因为当时自己思路写的) 如果是作用域链向外查找应该是能找到productList才对。然后 当我想在computed里面console.log()看看computed执没执行时,就是图上那样,结果功能就可以正常使用了。 这里不是很明白。
老师还有一个问题
当我for里面使用let 时,会提示我使用const 常量。 这里是不是bug了?
还是有点不理解这个computed
这几节课感觉有些难,所以问的有点频繁,希望老师不要嫌烦,感谢老师
正在回答 回答被采纳积分+1
同学你好,理解的不是特别正确。将productList = cartList.value[shopId]写在computed中后,由于cartList本身是响应式的(vuex的state中定义的数据是响应式的),并且参与了total的计算,所以改变cartList的时候就会触发computed,从而计算出新的total(写在里面,触发computed多次执行的是cartList):
即点击加减号改变cartList的值的时候,由于计算属性total会受到cartList的影响,所以会触发计算属性computed;而只要触发computed,就会重新计算productList,此时与productList是不是响应式没啥关系。
而写在外面时,与total(count)有关的数据只剩下了productList,而productList不是响应式,所以无法多次触发computed:
祝学习愉快!
同学你好,解答如下:
1、computed依赖的数据要满足两个条件,一是参与了计算,二是响应式。可以参考如下例子:
例一:
该例子中,点击按钮时,会触发click事件;在click事件中,会让a加2,而计算属性countAddFive的值是利用a得到的:
由于a不是响应式数据,所以它不是计算属性countAddFive的依赖;改变a,不会多次触发computed:
例二:
该例子中,打印了响应式数据countObj,但是它并没有参与计算,即computed中返回的值与它没关系,此时改变countObj也不会触发计算属性:
例三:
该例子中,计算属性countAddFive的值,是由响应式数据countObj决定的:
此时改变countObj会触发计算属性:
同学将const productList=cartList.value[shopId]写在computed外面时,由于初始时,vuex的state中cartList没有数据:
所以获取到的productList是undefined:
undefined不是响应式数据,所以不会多次触发computed:
而写在里面,相当于cartList参与了计算,而cartList是响应式,所以可以多次触发computed:
2、for in在遍历对象时,每遍历一次都会生成一个块级作用域,并在作用域中声明一个i(i处于不同的作用域中);实际上在每个块级作用域内i并没有被修改,所以编辑器提示可以使用const定义i。这里不是bug,只是一个语法上的建议。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星