体验vue3
v2语法的代码
<script>
export default {
data(){
return {
count:0
}
},
methods:{
add(){
this.count++
}
}
}
</script>
v3的语法
<script setup>
import { ref } from 'vue'
const count = ref(0)
const add = ()=> count.value++
</script>
vue3的特点
- 代码量变少
- 分散式维护变成集中式维护
- v3对v2的兼容性很好
相比于vue2的区别
1.组合式API
2.更好的支持TS
3.重写diff算法
4.模板变异优化(默认每一个文件都是模块)
5.TreeShaking
6.按需引入(写的多了会发现干的最多的就是引入)
7.采用Proxy数据响应式
使用create-vue搭建Vue3项目
认识create-vue
create-vue是一个脚手架工具,用来快速创建v3的项目。(Vuecli用来创建v2的项目) create-vue是Vue官方新的脚手架工具,底层切换到了 vite (下一代前端工具链),为开发提供极速响应
使用create-vue创建项目
前置条件 - 已安装16.0或更高版本的Node.js
执行如下命令,这一指令将会安装并执行 create-vue npm init vue@latest
运行之后在网页中会出现如下
上面的启动页中,列出了很多的学习资源,可以参考学习.
熟悉V3的项目目录和关键文件
package.json
vue的版本是3 + 依赖vite做底层驱动
vite.config.js
配置文件。类似vue2的vue.config.js。
业务文件夹src/main.js
new Vue() 创建vue的实例对象
createApp也是用来创建vue的实例对象
createApp(App).mount('#app')
mount('#app') 把vue的实例对象挂载在index.html的#app元素上
App.vue
- script -> template -> style
- script 上的setup是一个特殊的开关:
-
- 打开之后,就可以使用组合式api
- 不打开它,就可以继续兼容v2的写法
-
template中可以不需要唯一的根元素的区别
组合式API - setup选项
1. setup选项的写法和执行时机
格式
类似于生命周期钩子的写法。
<script>
export default {
setup(){
console.log('setup')
},
beforeCreate(){
console.log('beforeCreate')
}
}
</script>
执行时机
在beforeCreate钩子之前执行setup函数
setup中写代码的特点
在setup函数中写的数据和方法需要在末尾以对象的方式return,才能给模版使用。
setup 语法糖
如果要定义很多的数据,在模板中使用,那是不是要:1. 定义很多个数据。2. 写一个长长return?在v3中,它提供了setup语法糖
script标签添加 setup标记,不需要再写return语句,默认会添加return语句
这个语法糖其实只是方便我们程序员书写代码,通过编译我们会发现,编译后的代码其实是和不使用语法糖是一致的
组合式API - reactive和ref函数
1. reactive
作用
接收对象类型数据的参数传入并返回一个响应式的对象
步骤
- 从vue包中导入reactive函数
- 在的初始值,使用变量接收返回值
示例代码
<script setup>
import { reactive } from 'vue' // 导入
const state = reactive({ // 执行函数 传入参数 变量接收
count:0
})
const add = ()=>{
state.count++ // 修改数据更新视图
}
</script>
<template>
<button @click="add">{{state.count}}</button>
</template>
注意:
- 普通对象不是响应式的,可以正常访问,但是,不具备响应式的特点:修改数据之后,视图不会更新
- reactive必须要传入一个类型为对象的数据,不支持基本数据类型。 vue提供了更加适用的ref函数。
2. ref
作用
接收简单类型或对象类型数据的参数传入并返回一个响应式的对象
步骤
- 从vue包中导入ref函数
- 在 script setup中执行ref函数并传入初始值,使用变量接收返回值
在模板中使用数据不需加.value
在代码中使用数据要加.value
示例
<script setup>
import { ref } from 'vue' // 导入
const setCount = ()=>{ // 执行函数 传入参数 变量接收
console.log(count)
// 修改数据更新视图必须加上.value
count.value++
}
</script>
<template>
<button @click="setCount">{{count}}</button>
</template>
3. reactive 对比 ref
- 相同点:都是用来生成响应式数据
- 不同点
-
- reactive不能处理简单类型的数据
- ref参数类型支持更好,但是必须通过.value做访问修改
- ref函数内部的实现依赖于reactive函数
function ref -> createRef -> new RefImpl -> constructor -> toReactive -> reactive
- 在实际工作中的推荐 :推荐使用ref函数,减少记忆负担
今天暂时写到这,明天从compued计算属性写起