Vue3比Vue2有哪些优势
- 性能更好
- 体积更小
- 更好的ts支持
- 更好的代码组织
- 更好的逻辑抽离
- 更多新功能
描述Vue3的生命周期
- Options生命周期
- befoteDestroy改为beforeUnmount
- destroyed改为unmouted
- 其他沿用Vue2的生命周期
- Composition生命周期
- 在vue2的基础上都加了on
- setUp从生命周期上来讲,等于beforeCreate和created,所以composition API是没有beforeCreate和created生命周期
如何看待Composition Api和Options Api
- 更好的代码组织(相关逻辑代码可以集中放在一块,而不是分散存在)
- 更好的逻辑复用
- 更好的类型推导 1.比如options api中,方法被定义在methods中,但是调用时直接使用this来调用,不符合js语法规范,也不利于我们使用语法的方式来推导类型及属性。
- 适用于大型复杂的项目
- 不建议共用,小型项目用Options API,因为使用起来简单,门槛低。中大型项目逻辑复杂使用Composition Api
- Composition Api是为了解决复杂业务逻辑而设计的
如何理解ref toRef和toRefs
ref
- 生成值类型的响应式数据
- 用于模版和reactive(响应式数据)
- 通过.value修改值
- ref可以获取dom元素dom节点,在onMounted之后。
toRef与toRefs
- toRef如果用于普通对象(非响应式对象),产出的结果不具备响应式。
- toRefs将响应式对象(reactive封装)转换为普通对象
- toRefs对象的每个prop都对应的ref,两者保持引用关系
Vue3升级了哪些重要功能
- createApp
- emits属性
- 父组件事件名在子组件里面emits声明(事件名加on),然后在setup里面可以拿到emits
- 生命周期
- 多事件
- @click里面可以写多个事件
- Fragment
- template里面可以多个组件模板,在vue2里面只能用一个div套住全部的组件
- 移除.syc、移除filter
- vue2写法时
v-bind:title.sync。在vue3中v-model:title
- vue2写法时
- 异步组件的写法
- vue2的时候componts:{ 'my-zhujian':()=>('./../url')}
- vue3的时候需要引用defineAsyncComponent
- Teleport
- 弹窗可以直接 to=“body”
- Suspense
- 异步加载 先加载一个loading。。。再加载内容。实现逻辑就是内部有两个slot其中一个fllback具名插槽
- Composition API
- reactive
- ref
- readonly
- watch和wacthEffect
- setup
- 生命周期钩子函数
Composition Api如何实现代码逻辑复用
1. 抽离逻辑代码到一个函数
2. 函数命名约定为useXxxxx格式
3. 在setup中引用该函数
Vue3如何实现响应式
1. proxy只有在get的时候才做递归,获取到哪一层,才开始做响应式处理
2. vue2时在函数一开始就用Object.defineProperty把对象的所有属性做了getter和setter的处理
watch和watchEffect的区别是什么
1. 两者都可以监听到data变化
2. watch需要明确监听哪个属性
3. watchEffect会根据其中的属性,自动化监听,在初试分的时候一定会执行一次
setup中如何获取组件实例
- 在setup和其他Composition Api中没有this
- 可通过getCurrentInstance获取当前实例
- 若是用Options API可照常使用this
Vue3为何比Vue2快
Vite是什么
- web构建工具,前端打包工具
- 开发环境下无需打包,因为开发环境下使用的是ES6 Module
- 生产环境下使用rollup,并不快很多