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

相关推荐
2501_9445215917 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
Ken_111519 小时前
小体积附件下载正常,大附件下载异常
javascript
变与不变80620 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半20 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck20 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.20 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子20 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常20 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常20 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋21 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3