【Vue3的组合式API】超详细教程,含computed、watch、组件通信、模版引用......

简介: 【Vue3的组合式API】超详细教程,含computed、watch、组件通信、模版引用......

一、组合式API - setup选项

1. setup选项的写法和执行时机

写法

 <script>
    export default {
      setup(){
        
      },
      beforeCreate(){
        
      }
    }
  </script>

执行时机

在beforeCreate钩子之前执行

2. setup中写代码的特点

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

  
  <script>
    export default {
      setup(){
        const message = 'this is message'
        const logMessage = ()=>{
          console.log(message)
        }
        // 必须return才可以
        return {
          message,
          logMessage
        }
      }
    }
  </script>

3. setup语法糖

script标签添加 setup标记,不需要再写导出语句,默认会添加导出语句

  <script setup>
    const message = 'this is message'
    const logMessage = ()=>{
      console.log(message)
    }
  </script>

二、组合式API - reactive和ref函数

1. reactive

接受对象类型数据的参数传入并返回一个响应式的对象

 <script setup>
   // 导入
   import { reactive } from 'vue'
   // 执行函数 传入参数 变量接收
   const state = reactive({
     msg:'this is msg'
   })
   const setSate = ()=>{
     // 修改数据更新视图
     state.msg = 'this is new msg'
   }
  </script>
  
  <template>
    {{ state.msg }}
    <button @click="setState">change msg</button>
  </template>

2. ref

接收简单类型或者对象类型的数据传入并返回一个响应式的对象

 <script setup>
   // 导入
   import { ref } from 'vue'
   // 执行函数 传入参数 变量接收
   const count = ref(0)
   const setCount = ()=>{
     // 修改数据更新视图必须加上.value
     count.value++
   }
  </script>
  
  <template>
    <button @click="setCount">{{count}}</button>
  </template>

3. reactive 对比 ref

  1. 都是用来生成响应式数据
  2. 不同点
  1. reactive不能处理简单类型的数据
  2. ref参数类型支持更好,但是必须通过.value做访问修改
  3. ref函数内部的实现依赖于reactive函数
  1. 在实际工作中的推荐
  1. 推荐使用ref函数,减少记忆负担

三、组合式API - computed

计算属性基本思想和Vue2保持一致,组合式API下的计算属性只是修改了API写法

  
  <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>

四、组合式API - watch

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

1. 侦听单个数据

 
  <script setup>
    // 1. 导入watch
    import { ref, watch } from 'vue'
    const count = ref(0)
    // 2. 调用watch 侦听变化
    watch(count, (newValue, oldValue)=>{
      console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`)
    })
  </script>

2. 侦听多个数据

侦听多个数据,第一个参数可以改写成数组的写法

  <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>

3. immediate

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

 
  <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>

4. deep

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

<script setup>
    // 1. 导入watch
    import { ref, watch } from 'vue'
    const state = ref({ count: 0 })
    // 2. 监听对象state
    watch(state, ()=>{
      console.log('数据变化了')
    })
    const changeStateByCount = ()=>{
      // 直接修改不会引发回调执行
      state.value.count++
    }
  </script>
  
  <script setup>
    // 1. 导入watch
    import { ref, watch } from 'vue'
    const state = ref({ count: 0 })
    // 2. 监听对象state 并开启deep
    watch(state, ()=>{
      console.log('数据变化了')
    },{deep:true})
    const changeStateByCount = ()=>{
      // 此时修改可以触发回调
      state.value.count++
    }
  </script>

五、组合式API - 生命周期函数

1. 选项式对比组合式

2. 生命周期函数基本使用

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

3. 执行多次

生命周期函数执行多次的时候,会按照顺序依次执行

  
  <scirpt setup>
  import { onMounted } from 'vue'
  onMounted(()=>{
    // 自定义逻辑
  })
  
  onMounted(()=>{
    // 自定义逻辑
  })
  </script>

六、组合式API - 模版引用

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

1. 基本使用

实现步骤:

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

2. defineExpose

默认情况下在 <script setup>语法糖下组件内部的属性和方法是不开放给父组件访问的,可以通过defineExpose编译宏指定哪些属性和方法容许访问

举例如下:指定testMessage属性可以被访问到

七、组合式API - 组件通信

包含父传子、子传父、兄弟传值、依赖注入、全局状态管理......,

详情可见我的这两篇文章:

👉

👉

在此就不再赘述了💕

八、Vue3.3 新特性-defineOptions

背景说明:

有 <script setup> 之前,如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。

但是用了 <script setup> 后,就没法这么干了 setup 属性已经没有了,自然无法添加与其平级的属性。


为了解决这一问题,引入了 defineProps defineEmits 这两个宏。但这只解决了 props 与 emits 这两个属性。

如果我们要定义组件的 name 或其他自定义的属性,还是得回到最原始的用法——再添加一个普通的 <script> 标签。

这样就会存在两个 <script> 标签。让人无法接受。


所以在 Vue 3.3 中新引入了 defineOptions 宏。顾名思义,主要是用来定义 Options API 的选项。可以用 defineOptions 定义任意的选项, props, emits, expose, slots 除外(因为这些可以使用 defineXXX 来做到)

九、Vue3.3新特性-defineModel

在Vue3中,自定义组件上使用v-model, 相当于传递一个modelValue属性,同时触发 update:modelValue 事件

我们需要先定义 props,再定义 emits 。其中有许多重复的代码。如果需要修改此值,还需要手动调用 emit 函数。

于是乎 defineModel 诞生了。

生效需要配置 vite.config.js

 
  import { fileURLToPath, URL } from 'node:url'
 
  import { defineConfig } from 'vite'
  import vue from '@vitejs/plugin-vue'
  
  // https://vitejs.dev/config/
  export default defineConfig({
    plugins: [
      vue({
        script: {
          defineModel: true
        }
      }),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    }
  })
相关文章
|
10天前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
3月前
|
JSON API 网络安全
通用邮箱邮件获取API教程:支持IMAP/POP3协议
本文介绍如何通过接口盒子的免费API获取邮箱邮件,支持IMAP/POP3协议,适用于QQ邮箱、网易邮箱等主流服务。内容包括接口基本信息、请求参数、返回参数、调用示例及注意事项,帮助开发者快速实现邮件读取功能。
|
3月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
|
3月前
|
JSON API PHP
通用图片搜索API:百度源免费接口教程
本文介绍一款基于百度图片搜索的免费API接口,由接口盒子提供。支持关键词搜索,具备详细请求与返回参数说明,并提供PHP及Python调用示例。开发者可快速集成实现图片搜索功能,适用于内容聚合、素材库建设等场景。
|
3月前
|
JSON 机器人 API
随机昵称网名API接口教程:轻松获取百万创意昵称库
接口盒子提供随机昵称网名API,拥有百万级中文昵称库,支持聊天机器人、游戏角色等场景的昵称生成。提供详细调用指南及多语言示例代码,助力开发者高效集成。
|
23天前
|
人工智能 API 开发者
图文教程:阿里云百炼API-KEY获取方法,亲测全流程
本文详细介绍了如何获取阿里云百炼API-KEY,包含完整流程与截图指引。需先开通百炼平台及大模型服务,再通过控制台创建并复制API-KEY。目前平台提供千万tokens免费额度,适合开发者快速上手使用。
451 5
|
3月前
|
JSON API PHP
天气预报免费API接口【地址查询版】使用教程
本文介绍了如何使用中国气象局官方数据提供的免费天气预报API接口,通过省份和地点查询指定地区当日天气信息。该接口由接口盒子支持,提供JSON格式数据、GET/POST请求方式,并需注册获取用户ID和KEY进行身份验证。
1742 2
|
3月前
|
JSON API PHP
ICP备案查询免费API接口使用教程
本文介绍如何通过接口盒子提供的免费API接口查询域名ICP备案信息,包含请求地址、参数说明及PHP和Python调用示例,适用于开发者快速集成备案查询功能。
|
3月前
|
JSON Shell API
查手机号归属地免费API接口教程
本接口提供手机号码归属地查询功能,支持获取号段、归属地省份/城市、运营商、区号、邮编等信息。请求地址为 `https://cn.apihz.cn/api/ip/shouji.php`,支持 POST 或 GET 方式调用,需提供 `id`、`key` 和 `phone` 参数。返回包含归属地信息及运营商等数据,适用于手机号归属查询场景。
|
3月前
|
JSON API 开发者
淘宝 API 零基础快速上手教程(2025 版)
淘宝API是淘宝开放平台提供的接口,允许开发者获取商品、订单等数据,并实现自动化操作。本文介绍了API基础概念、账号开通流程、权限申请、调用方法及实战示例,适合零基础开发者快速入门并掌握淘宝API的核心使用技巧。