vue3

采用组合式API

底层构建工具使用vite 响应快 create-vue成为新的脚手架工具

状态管理工具使用Pinia

pnpm create vue 创建项目

优势

  1. 更容易维护 更好的TS支持
  2. 更快的速度
  3. 更小的体积 按需引入
  4. 更优的数据响应 Proxy

目录结构

代码编写

  1. js 文件写在最上面 在script 中加上setup 直接编写组合式API,setup的执行时机在beforeCreate生命周期函数之前

  2. 没有了this选项,获取不到this

  3. reactive和ref函数

    • 都是用函数调用的方式生成响应式数据
    • reactive不能处理简单类型的数据
    • ref定义的数据必须通过.vaule访问和修改
    • re函数内部基于reactive函数实现
  4. pnpm create vue 创建项目

  5. 在setup函数中写的数据和方法需要在末尾以对象的方式return,才能给模版使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <script>
    export default {
    setup(){
    const message = 'this is message'
    const logMessage = ()=>{
    console.log(message)
    }
    // 必须return才可以
    return {
    message,
    logMessage
    }
    }
    }
    </script>
  6. script标签添加 setup标记,不需要再写导出语句,默认会添加导出语句

    1
    2
    3
    4
    5
    6
    <script setup>
    const message = 'this is message'
    const logMessage = ()=>{
    console.log(message)
    }
    </script>

计算属性

1
2
3
4
5
6
7
8
9
10
11
12
13
<script setup>
// 导入
import {ref, computed } from 'vue'
// 原始数据
const count = ref(0)
// 计算属性
const doubleCount = computed(()=>count.value * 2)

// 原始数据
const list = ref([1,2,3,4,5,6,7,8])
// 计算属性list
const filterList = computed(item=>item > 2)
</script>

监听

侦听一个或者多个数据的变化,数据变化时执行回调函数,俩个额外参数 immediate控制立刻执行,deep开启深度侦听

1
2
3
4
5
6
7
8
9
10
<script setup>
// 1. 导入watch
import { ref, watch } from 'vue'
const count = ref(0)
const name = ref('cp')
// 2. 调用watch 侦听变化
watch([count, name], ([newCount, newName],[oldCount,oldName])=>{
console.log(`count或者name变化了,[newCount, newName],[oldCount,oldName])
})
</script>

immediate 在侦听器创建时立即出发回调,响应式数据变化之后继续执行回调

1
2
3
4
5
6
7
8
9
10
11
<script setup>
// 1. 导入watch
import { ref, watch } from 'vue'
const count = ref(0)
// 2. 调用watch 侦听变化
watch(count, (newValue, oldValue)=>{
console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`)
},{
immediate: true
})
</script>

通过watch监听的ref对象默认是浅层侦听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep

生命周期函数

选项式对比组合式

基本使用

  1. 导入生命周期函数
  2. 执行生命周期函数,传入回调
1
2
3
4
5
6
<scirpt setup>
import { onMounted } from 'vue'
onMounted(()=>{
// 自定义逻辑
})
</script>

生命周期函数执行多次的时候,会按照顺序依次执行,可以定义多个同一时期的生命周期函数

父子通信

  1. 父组件中给子组件绑定属性
  2. 子组件内部通过props选项接收数据
  3. 父组件中给子组件标签通过@绑定事件
  4. 子组件内部通过 emit 方法触发事件

模板引用

通过 ref标识 获取真实的 dom对象或者组件实例对象

  1. 调用ref函数生成一个ref对象
  2. 通过ref标识绑定ref对象到标签
QQ_1737694759034

defineExpose

默认情况下在