美文网首页WEB前端程序开发让前端飞
为何vue不能检测通过索引设置数组的某一项?

为何vue不能检测通过索引设置数组的某一项?

作者: gzgogo | 来源:发表于2018-12-18 02:09 被阅读3次

Vue 官方原文:由于 JavaScript 的限制, Vue 不能检测以下变动的数组:

当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如: vm.items.length = newLength

首先我测试了下Object.defineProperty是可以通过索引属性来设置属性的访问器属性的:

var arr = [1,2,3];
var initValue = 99;
Object.defineProperty(arr,"2",{
    get:function (){
        //当获取值的时候触发的函数
        return initValue;    
    },
    set:function (value){
        //当设置值的时候触发的函数,设置的新值通过参数value拿到
        console.log('set: ', value);
        initValue = value;
    }
});
//获取值
console.log( arr[2] );  //hello

//设置值
arr[2] = 88;

console.log( arr[2] ); //change value

arr.push(4);

console.log( arr[2] ); //change value

console.log('arr: ', arr);
展开前 展开后
image.png image.png
  • 将鼠标悬浮于三个点上时,会提示 The property is computed with getter

既然如此,那为何做不了监听?
原因很简单:性能问题,性能的代价和用户体验收益不成正比

参考 记一次思否问答的问题思考:Vue为什么不能检测数组变动

相关文章

  • vue.js中$set与数组更新

    由于 JavaScript 的限制,Vue 不能检测以下变动的数组:当利用索引直接设置数组的某一项时,例如:vm....

  • 为何vue不能检测通过索引设置数组的某一项?

    Vue 官方原文:由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个...

  • Vue.set

    由于以下两种情况,vue是不能检测到数组变化,也不会触发视图更新 1 通过索引直接设置数组的项, 2 直接修改数组...

  • console.log()打印数据实时变化,视图未更新

    1、JavaScript 的限制,Vue 不能检测以下数组的变动 - 利用索引直接设置一个项时,例如: vm.it...

  • vue之列表渲染,数组更新检测

    由于 JavaScript 的限制,Vue 不能检测以下变动的数组:当你利用索引直接设置一个项时,例如:vm.it...

  • Vue学习

    $set 1.vue不能检测以下变动的数组 (不能通过索引或者length改变数组) 通过索引值改变数组 d...

  • Vue不能观察到数组length的变化

    由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.i...

  • vue数组中对象属性变化页面不渲染问题

    由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.i...

  • vue.set初识记录

    注意事项 由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如...

  • Vue 检测数据变化

    1.检测数组 由于javascript的限制,Vue不能检测到下面数组的变化:直接索引设置元素,如vm.item[...

网友评论

    本文标题:为何vue不能检测通过索引设置数组的某一项?

    本文链接:https://www.haomeiwen.com/subject/hqzhkqtx.html