• 趙學躍
    2022-12-28 来自北京
    “Vue.js 最开始的响应式实现是基于 ES6 的一个 Object.defineProperty 的特性拦截监听数据变化”,Object.defineProperty是ES5提供的吧

    作者回复: 您好, 谢谢指正,纯属笔误,是ES5就有的。这里顺便补充一下tc39官方对Object.defineProperty 描述 https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.defineproperty

    
    2
  • 文艺理科生
    2022-12-08 来自北京
    最大的问题是因为 Vue.js 1.x 到 2.x 版本都是用的  Object.defineProperty 在监听数组变化时候,监听不到 Array.push 等数组变化操作 ——》通常都是用的push操作,应该是监听不到数组的索引相关操作吧

    作者回复: 您好,你的理解非常不错, Vue.js 1.x 和 2.x,在数据绑定中,对数组类型的监听做了很多额外的工作,原理是对Array原生一些方法做了特殊处理,才能使得数组变化能监听到。

    
    1
  • 都市夜归人
    2022-12-01 来自江苏
    watch( // 监听 state.text 的变化 [() => state.text ], ([ text ], [ prevText ]) => { // 当监听到state.text 变化,就会触发这个回调函数 state.zhCount = countZhText(text); } ) 这段语法不太理解,请问为何要将被监听的变量放到数组里?谢谢!

    作者回复: 您好,这个数组的写法是Vue.js 3的API定义的。 “watch当侦听多个来源时,回调函数接受两个数组,分别对应来源数组中的新值和旧值”。 具体可以参考官方文档 https://cn.vuejs.org/api/reactivity-core.html#watch

    共 5 条评论
    
  • 风太大太大
    2022-11-30 来自湖北
    那么如果换成组合式 API(Options API)的开发方式,响应式功能的实现应该怎么操作? 1. 使用原vue2的写法,把响应的数据放在data函数的返回值中。只要后续直接this.xxx 修改这个值就是响应式。 2. 利用vue3的写法.使用setUp函数,照样可以使用reactive函数和ref函数。

    作者回复: 您好,你的回答非常好。

    共 2 条评论
    
  • 01
    2022-12-01 来自福建
    全文提到好几次JSON 数据。 但是对象并不是JSON
    共 2 条评论
    4
  • 风太大太大
    2022-11-30 来自湖北
    个人觉得文中有句话说的不是很合理,怕引起误会。“简单来讲,这个语境里的“响应式”就是“页面的模板内容能随着数据变化而重新渲染”。 这样是否合理,常规来看,这里这个语境里的“响应式”就是“页面的模板内容 及其他数据 能随着数据变化而重新渲染”。而实际响应式就是:当依赖的数据变化了,会更新使用这个数据相关的函数,内容模板是依赖数据试用的函数的一种,还有compute函数,watch函数等.
    共 2 条评论
    3