记 Vue 数据更新视图不同步的问题

当Vue数组或对象数据更新后,视图未同步显示改变。解决方法包括使用数组的更新检测方法和确保对象的新property是响应式的。问题源于Vue在初始化时将对象的property转化为getter/setter,但无法检测新添加的property。遵循良好编程习惯,如使用Vue提供的方法创建新数组和对象,可以避免此类问题。
摘要由CSDN通过智能技术生成

问题描述:

控制台打印出数组/对象数据已经修改成功,但是页面上并没有同步更新。

解决方法:

搜索引擎搜一下可以看到有好多答案了,总结有以下两点:

  • 数组:使用数组更新检测方法

    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()
  • 对象:Vue.set( target, propertyName/index, value )

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

问题解析:

建议详细、仔细、逐字阅读深入响应式原理,文档已经描述的非常清晰。不知道你是否和我一样阅读文档不求甚解,只求快速找到解决方法 (・_・;

下面我们一起分析下产生这种问题的原因:参考示例

1. Vue 是如何追踪数据变化的

当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。

2. 检测变化的注意事项
const list = [
  {
   
    name: "Jim Green",
    age: 24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值