认识
一、认识
双向数据绑定 基于 MVVM
模型, 包括数据层Model
、视图层View
、业务逻辑层ViewModel
。其中 ViewModel
(业务逻辑层) 负责将数据和视图关联起来, 提供了数据变化后更新视图和视图变化后更新数据这样一个功能,就是传统意义上的双向绑定。
Vue.js 3.0
reactive
对非原始值 Object
、Array
、Set
、Map
基于 Proxy
实现响应式。通过 Proxy
监听整个对象, 实现双向绑定(响应式)。监听策略如下:
-
通过
get
处理器监听属性的访问, 收集对应属性相关副作用 -
通过
set
处理器监听属性的变更, 触发对应属性相关副作用函数执行 -
通过
has
处理器来监听xx in yy
操作符, 收集对应属性相关副作用 -
通过
ownKeys
处理器来监听for in
、for of
遍历操作, 收集ITERATE_KEY
相关的副作用。因为ownKeys
只有一个target
参数, 没有key
, 对于对象来说需要一个ITERATE_KEY
来充当key
, 后续之后新增属性时, 才会触发副作用函数执行, 已有属性不触发。对于数组而言, 无论是为数组添加新元素还是直接修改数组的长度, 本质上都是因为修改了数组的length
属性。 一旦数组的length
被修改, 那么for…in
、for……of
循环对数组的遍历结果就会改变。 -
通过
deleteProperty
处理器来监听属性删除操作, 触发对应属性副作用函数重新执行 -
对于
array.includes() array.indexOf() array.lastIndexOf()
查找类型的数组API
, 查找的目标元素有可能是代理数据, 有可能是原始数据, 但是array
肯定是代理数据,