## Vue的数据驱动原理?数据更新原理?响应式原理?
- 数据通过object.defineProperty进行getset拦截。
- 通知watcher(观察者模式)订阅发布模式,触发组件重新渲染,创建新的虚拟DOM,对比旧的虚拟DOM,通过diff找出不同,以最小代价更新节点。
什么是Vue?
- 核心代表人物 尤雨溪
- Vue是饿了么ued团队开发并维护的一个渐进式框架,核心关注视图层
- vue的核心是一个允许采用简洁的模板声明式的将数据渲染进DOM系统
- m与v没有任何联系,VM=>双向数据绑定
为什么vue中m层改变了,viewmodel知道m层变化,或双向数据绑定的原理?
- vue在创建视图时,会将数据配置到vue实例中,然后内部通过object.defineProperty方法,为数据动态添加get和set方法,当获取数据时会触发get方法,当设置对象时会触发set方法;当set方法触发 完成时,进一步watcher触发,数据改变完成了,试图也进行了重新渲染。
数组的更新检测
- vue将被侦听的数组的变更方法进行了包裹,所以他们将会触发视图更新
- push() 在数组后面添加元素,返回数组的长度
- pop() 在数组后面删除一个元素,返回删除的数据
- shift() 在数组前面删除一个元素,返回删除的数据
- UNshift()
- splice() 数组的剪贴,删除,插入
- sort() 数组的排序
- reserve() 数组的反转
不会触发视图更新的有:concat() slice()
事件修饰符
- stop 阻止事件冒泡
- prevent 取消事件默认行为
- self 只有在自身上面触发
- once 触发一次
v-model 底层实现原理
- 内部给输入框绑定value属性,和监听input属性
修饰符:
lazy 等光标离开后进行更新操作
number 若能被parsefloat解析则输出结果否则原样输出
trim 去掉前后空格
计算属性 及watcher与computed区别
- 计算属性会根据现有元素生成一个新的数据,并且两者产生永久性关联,建立缓存关系,当无关数据变动时,计算属性不会重新计算,而直接从缓存取值即可
- 区别: watch监听只能是单个的监听,每次监听只能一个变量的修改,计算属性可以依赖多个数据的变化。2.当需要数据变化时执行异步操作或开销较大时用watch
什么是虚拟DOM?
- 虚拟DOM就是虚拟对象,属于虚拟数据,真实DOM的一种映射
- 内存中生成一棵虚拟DOM
- 将内存中的虚拟DOM树初始化渲染成一颗真实DOM树
- 当我们修改vue实例中data数据时
- 之前的虚拟DOM结合更改后的数据生成一颗新的虚拟DOM
- 将此次生成的虚拟DOM与上一次虚拟DOM对比(diff算法)
- 将对比后差异的部分进行重新真实的DOM渲染
浏览器加载一个HTML文件的大致流程
- 构建DOM树
- 构建style rules ,页面样式表
- 将DOM树和样式表结合形成render tree(渲染树)
- 布局 为每个render 树上的节点确定在显示屏上的精准坐标信息
- 绘制 触发每个节点的paint方法
为什么组件的data必须是函数?
因为每个实例可以维护一份被返回对象的独立拷贝