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计算标记属性。

相关推荐
天疆说6 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢7 小时前
02-从硬件说起WebGL
前端·three.js
kyriewen8 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude
2601_963771378 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
亿元程序员8 小时前
老板说我的3D箭头游戏用来做试玩太普通了,没人想玩,让我变点花样...
前端
李伟_Li慢慢9 小时前
01-threejs架构原理-课程简介
前端·three.js
_瑞10 小时前
深入理解 iOS 渲染原理
前端·ios
IT_陈寒10 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
碎碎念_49210 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
iCOD3R11 小时前
Skill - kill-ai-slop 解决“AI 味”样式
前端·css·ai编程