# 第四篇 整体流程
# 相关面试题
# vue 组件中 data 为什么用函数返回一个对象,而不是一个对象
防止该组件多次使用时,共用同一份数据,导致数据错乱。
用函数返回一个对象,多个相同组件的数据都可以保持独立,互补影响。
# 为什么会有 $nextTick 主要为了解决什么问题?
因为 vue 更新异步的,修改某个值,dom 不会实时更新。
如下代码中,短时间内 count 值增加了 3 次,如果不使用异步队列,渲染三次?
为了更加高效,减少更新消耗,会将短时间内的多次数据变更合并到一次渲染周期。
import { reactive, watch } from "vue";
const state = reactive({ count: 0 });
watch(
() => state.count,
(count, prevCount) => {
console.log(count);
}
);
state.count++;
state.count++;
state.count++;
// http://www.eggcake.cn/posts/2021-01-13-vue3-core-source-code-9
# vue3 相比 vue2 做了哪些优化?
- 源码优化
- 更好的代码管理方式:monorepo
- 有类型的 JavaScript:TypeScript
- 性能优化
- 源码体积优化
- 数据劫持优化
- 编译优化
- 语法 API 优化:Composition API
- 优化逻辑组织
- 优化逻辑复用
- 引入 RFC:使每个版本改动可控
- 过渡期
http://www.eggcake.cn/posts/2020-12-19-vue3-core-source-code-0 (opens new window)
← 第三篇 模板编译原理 Vue介绍 →