vue computed计算不到数组或者对象的变化

json 复制代码
form: {
	...
	childQuestionItems:[
		...
		{
			...
			score: 6
		}
	]
}
...
computed: {
	totalScore(){
      	return this.form.childQuestionItems.reduce((sum,e)=> sum + Number(e.score || 0), 0)
    }
}    

想要computed 监听计算form.childQuestionItems改变后所有score的和

但是 computed并不监听。

原因

对象:

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = 'hi')

数组:

Vue 不能检测以下数组的变动:

当你利用索引直接设置一个数组项时,例如:vm.itemsindexOfItem = newValue

当你修改数组的长度时,例如:vm.items.length = newLength

解决

json 复制代码
Vue.set( target, key, value),
target: 要更改的数据源(可以是对象或者数组)
key: 要更改的具体数据
value: 重新赋的值。
// 或
Array.prototype.splice
splice(start, deleteCount, item1)
js 复制代码
this.$set(this.form.childQuestionItems,this.form.childQuestionItems[questionIndex],form)

另一种方式

添加一个标记属性,当所要监听对象改变后标记属性值+1 ,computed计算标记属性。

相关推荐
wuxia211827 分钟前
微信小程序单击元素切换元素的显示和隐藏
javascript·微信小程序·setdata
JustHappy33 分钟前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本41 分钟前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
weixin_471383031 小时前
图片预解码缓存
前端·浏览器缓存·图片预解码
一起学开源1 小时前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
岁月宁静2 小时前
驾驭 AI 这匹野马:深入解析智能体 Harness 工程
vue.js·python
郑洁文3 小时前
基于网络爬虫的Web敏感信息泄露自动化检测工具
前端·爬虫·网络安全·自动化
游九尘3 小时前
JavaScript 实现三段式版本号对比函数(app升级用)
javascript·uni-app
zhiSiBuYu05173 小时前
Claude-Code 新手极速上手指南
javascript·node.js
郑洁文3 小时前
可视化Web渗透分析工具的设计与实现
前端