最常问的概念性的问题,其余的vue的一些语法糖的用法在这里就不列举了;
什么是双向数据绑定
model->View
View->Model
实现的方式主要是通过v-model的语法糖实现的:
vue3和vue2的区别
-
响应式
- vue2:object.defineProperty
- vue3:Proxy
-
**Composition API vs Options API
-
性能与渲染机制
- vue3在运行时和编译优化上更激进:
- 在编译阶段生成更多优化的提示(patch flags),减少运行时diff成本
- 更好的tree shaking(按需引入)
- vue2
- 缺乏
- vue3在运行时和编译优化上更激进:
vue的双向数据绑定为什么不会死循环
1.依赖追踪是单向的:读取时收集依赖,写入时触发更新; 2.更新是异步批处理的:
v-model向上会写的时候只有在用户事件input、change时发生。
vue的diff算法
1.同层比较; 2.节点是否可复用: 3.有key的话基于key做映射; 4.子节点更新:双端比较
vue3如何实现数据绑定
- 读(get):依赖收集
- 写(set):触发更新
- Reflect的角色:是拦截器,使用Reflect.get / Reflect.set来做标准读写,语义更明确
回答:用proxy实现,vue会把数据对象包一层Proxy,在get时做依赖收集,在set时做依赖触发。把副作用函数放入调度队列中,进行去重与批量刷新,从而驱动组件重新渲染并且更新dom。