vue3学习总结
前言
此文章只做个人学习总结,有不足的地方欢迎各位大佬补充
项目搭建
vue3项目创建
但是在创建的之前要先保证电脑上有node环境并且并且版本要在18.3或者更高版本vue3官网地址
一般创建方式有两种cli和vite,官方推荐使用vite创建,我们这里使用vite创建项目
npm create vite@latest
输入命令后会让我们输入项目名称 模板 脚本语言
名称不输入会使用默认项目名称
vue3对ts支持更好我们默认使用ts也可以使用js
在vscode中打开项目结构如下
第一次打开vue3的项目会默认提示安装vue3的vscode插件选择安装即可(可以提供代码提示)
这里要注意的是如果你是选择js的话就不要安装提供的插件并使用vue2的插件(会冲突代码报红)
vue3基础
生命周期钩子
在vue3官方文档中总共有12个钩子常用的有三个(onMounted,onUpdated,onUnmounted)
具体的可以看官网
| 钩子名称 | 描述 | 使用方式 |
|---|---|---|
| onMounted() | 在组件挂载完成后执行 在服务器端渲染期间不会被调用 | onMounted(()=>{}) |
| onUpdated() | 在组件因为响应式状态变更而更新其 DOM 树之后调用 在服务器端渲染期间不会被调用 | onUpdated(()=>{}) |
| onUnmounted() | 在组件实例被卸载之后调用 在服务器端渲染期间不会被调用 | onUnmounted(()=>{}) |
| onBeforeUpdate() | 在组件即将因为响应式状态变更而更新其 DOM 树之前调用 在服务器端渲染期间不会被调用 | onBeforeUpdate(()=>{}) |
| onBeforeUnmount() | 在组件实例被卸载之前调用 在服务器端渲染期间不会被调用 | onBeforeUnmount(()=>{}) |
| onErrorCaptured() | 在捕获了后代组件传递的错误时调用 | onErrorCaptured(()=>{) |
| onRenderTracked() | 调试钩子,当组件渲染过程中追踪到响应式依赖时调用 仅在开发模式下可用,且在服务器端渲染期间不会被调用 | onRenderTracked(()=>{}) |
| onRenderTriggered() | 调试钩子,当响应式依赖的变更触发了组件渲染时调用 仅在开发模式下可用,且在服务器端渲染期间不会被调用 | onRenderTriggered(()=>{}) |
| onActivated() | 若组件实例是 KeepAlive 缓存树的一部分,当组件被插入到 DOM 中时调用 在服务器端渲染期间不会被调用 | onActivated(()=>{}) |
| onDeactivated() | 若组件实例是 KeepAlive 缓存树的一部分,当组件从 DOM 中被移除时调用 在服务器端渲染期间不会被调用 | onDeactivated(()=>{}) |
| onServerPrefetch() | 异步函数,在组件实例在服务器上被渲染之前调用 | onServerPrefetch(async()=>{await.....}) |
选项式api
option API
沿用vue2的方式进行代码编写
<template>
<div>
{{ num }}
<button @click="countNum"></button>
</div>
</template>
<script>
export default{
data(){
return{
num:1
}
},
methods:{
countNum(){
this.num ++
}
}
}
</script>
组合式api
composition API
变量,方法都声明在setup函数中,通过命名式引入想要的生命钩子函数等,并且要变量能响应式要引入ref和reactive
<template>
<div>
{{ num }}
<button @click="countNum"></button>
</div>
</template>
<script>
import { ref,reactive } from "vue";
export default{
setup(){
const num = ref(1)
function countNum(){
num.value ++
}
return {num,countNum}
}
}
</script>
setup语法糖
setup函数还可以通过语法糖的方式使用
<template>
<div>
{{ num }}
<button @click="countNum"></button>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const num = ref(1)
function countNum(){
num.value ++
}
</script>
ref和reactive
ref获取数据时要用num.value = 值
reactive直接通过点的方式
<script setup lang="ts">
import { ref,reactive } from "vue";
const num = ref()
const user = reactive({
name:'zhanshang',
age:18
})
</script>
wacth监听函数
<script setup lang="ts">
import { ref,reactive,watch } from "vue";
const num = ref()
const user = reactive({
name:'zhanshang',
age:18
})
watch(()=>num.value,(newValue,oldValue)=>{
//监听变量num,当num发生变化时候调用,返回新值newValue 和 变动之前的值oldValue
})
</script>
props&emit 子父组件交互
父组件
<template>
<div class="appClass">
<optionApi :msg="msg" @update="update"></optionApi>
</div>
</template>
<script setup lang="ts">
import optionApi from './pages/optionApi.vue';
import {ref} from 'vue'
const msg = ref('parent Value')
function update(value:String){
console.log(value)
}
</script>
子组件
<template>
<div>
{{ msg }}
</div>
</template>
<script setup lang="ts">
import { defineProps,defineEmits} from "vue";
const emits = defineEmits(['update'])
//接收父组件数据
defineProps({
msg:String
})
//传递数据给父组件
function sendUpdate(){
emits('update','Child Value')
}
</script>
学习总结
vue3对比起vue2新增了很多新的东西如:composition API,ref,setup,对ts的兼容和支持 文章中还有许多未提到的知识,暂时只写了个人学到的和常用的一些api等,有不足的欢迎各位大佬指点