快速入门vue3组合式API

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

使用create-vue创建项目

熟悉项目目录和关键文件 

组合式API 

setup选项

setup选项的写法和执行时机

script setup 语法糖

reactive和ref函数

reactive()

ref()

computed

watch

侦听单个数据

侦听多个数据 

immediate 

deep

精确侦听对象的某个属性 

生命周期函数

Vue3的生命周期API (选项式 VS 组合式)

父子通信 

组合式API下的父传子

组合式API下的子传父 

模版引用 

如何使用(以获取dom为例 组件同理)

defineExpose() 


使用create-vue创建项目

1. 前提环境条件
已安装 16.0 或更高版本的 Node.js
node -v
2. 创建一个Vue应用
npm init vue@latest
这一指令将会安装并执行 create-vue

熟悉项目目录和关键文件 

关键文件:
1. vite.config.js - 项目的配置文件 基于vite的配置
2. package.json - 项目包文件 核心依赖项变成了 Vue3.x 和 vite
3. main.js - 入口文件 createApp函数创建应用实例
4. app.vue - 根组件 SFC单文件组件 script - template - style
        变化一:脚本script和模板template顺序调整
        变化二:模板template不再要求唯一根元素
        变化三:脚本script添加setup标识支持组合式API
5. index.html - 单页入口 提供id为app的挂载点

组合式API 

setup选项

setup选项的写法和执行时机

    

1. 执行时机,比beforeCreate还要早

2. setup函数中,获取不到this (this是undefined)

<script> 
// setup
// 1. 执行时机,比beforeCreate还要早
// 2. setup函数中,获取不到this (this是undefined)
export default {
  setup () {
    console.log('setup函数',this)
  },
  beforeCreate () {
    console.log('beforeCreate函数')
  }
}
</script>

网页显示为:                                                 

3. 数据 和 函数,需要在 setup 最后 return,才能模板中应用

<script> 
export default {
  setup () {
    // 数据
    const message = 'hello Vue3'
    // 函数
    const logMessage = () => {
      console.log(message)
    }
    return {
      message,
      logMessage
    }
  }
}
</script>

<template>
  <div>{{ message }}</div>
  <button @click="logMessage">按钮</button>
</template>

script setup 语法糖

问题:每次都要return,好麻烦?

4. 通过 setup 语法糖简化代码

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

<template>
  <div>{{ message }}</div>
  <button @click="logMessage">按钮</button>
</template>

reactive和ref函数

reactive()

作用: 接受 对象类型数据的参数传入 并返回一个 响应式的对象
核心步骤:
1. 从 vue 包中 导入 reactive 函数
2. 在 <script setup> 中 执行 reactive 函数 并传入 类型为对象 的初始值,并使用变量接收返回值
<script setup>
//1. reactive: 接收一个对象类型的数据,返回一个响应式的对象
import { reactive } from 'vue'
const state = reactive({
  count: 100
})
const setCount = () => {
  state.count++
}

</script>

<template>
  <div>
    <div>{{ state.count }}</div>
    <button @click="setCount">+1</button>
  </div>
</template>

ref()

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

本质:是在原有传入数据的基础上,外层包了一层对象,包成了复杂类型

           底层,包成复杂类型之后,再借助 reactive 实现的响应式

注意点:

           1. 脚本中访问数据,需要通过 .value

           2. 在template中,.value不需要加 (帮我们扒了一层)

核心步骤:

1. 从 vue 包中 导入 ref 函数
2. 在 <script setup> 中 执行 ref 函数 并传入初始值,使用 变量接收 ref 函数的返回值
<script setup>
import { ref } from 'vue'
const count = ref(0)
const setCount = () => {
  count.value++
}
</script>

<template>
  <div>
    <div>{{ count }}</div>
    <button @click="setCount">+1</button>
  </div>
</template>

computed

计算属性基本思想和Vue2的完全一致, 组合式API下的计算属性 只是修改了写法
核心步骤:1. 导入 computed函数
2. 执行函数 在回调参数中 return基于响应式数据做计算的值 ,用 变量接收
<script setup>
import{computed,ref}from 'vue'
const list=ref([1,2,3,4,5,6,7,8])
const computedList = computed(()=>{
  return list.value.filter(item=>item>2)
})
</script>

<template>
  <div>
    <div>原始数据: {{ list }}</div>
    <div>计算后的数据: {{ computedList }}</div>
  </div>
</template>a

watch

作用: 侦听 一个或者多个数据 的变化,数据变化时执行回调函数
俩个额外参数:1. immediate(立即执行) 2. deep(深度侦听)

侦听单个数据

1. 导入watch 函数
2. 执行watch函数 传入要侦听的响应式数据 (ref对象) 和回调函数

侦听多个数据 

同时侦听多个响应式数据的变化, 不管哪个数据变化都需要执行回调

immediate 

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

deep

通过watch监听的ref对象默认是 浅层侦听的,直接修改嵌套的对象属性不会触发回调执行 ,需要开启deep选项
<script setup>
import{watch,ref}from 'vue'
// 4. deep 深度监视, 默认 watch 进行的是 浅层监视
//    const ref1 = ref(简单类型) 可以直接监视
//    const ref2 = ref(复杂类型) 监视不到复杂类型内部数据的变化
const userInfo = ref({
  name: 'zs',
  age: 18
})
const setUserInfo = () => {
  // 修改了 userInfo.value 修改了对象的地址,才能监视到
  // userInfo.value = { name: 'ls', age: 50 }
  userInfo.value.age++
}

// deep 深度监视
watch(userInfo, (newValue) => {
  console.log(newValue)
}, {
  deep: true
})
</script>

<template>
  <div>{{ userInfo }}</div>
  <button @click="setUserInfo">修改userInfo</button>
</template>a

精确侦听对象的某个属性 

在不开启deep的前提下,侦听age的变化,只有age变化时才执行回调
<script setup>
import{watch,ref}from 'vue'
// 4. deep 深度监视, 默认 watch 进行的是 浅层监视
//    const ref1 = ref(简单类型) 可以直接监视
//    const ref2 = ref(复杂类型) 监视不到复杂类型内部数据的变化
const userInfo = ref({
  name: 'zs',
  age: 18
})
const setUserInfo = () => {
  // 修改了 userInfo.value 修改了对象的地址,才能监视到
  // userInfo.value = { name: 'ls', age: 50 }
  userInfo.value.age++
}

// 5. 对于对象中的单个属性,进行监视
watch(() => userInfo.value.age, (newValue, oldValue) => {
  console.log(newValue, oldValue)
})
</script>

<template>
  <div>{{ userInfo }}</div>
  <button @click="setUserInfo">修改userInfo</button>
</template>

生命周期函数

Vue3的生命周期API (选项式 VS 组合式)

父子通信 

组合式API下的父传子

基本思想
1. 父组件中给 子组件绑定属性
2. 子组件内部通过 props选项接收

defineProps 原理:就是编译阶段的一个标识,实际编译器解析时,遇到后会进行编译转换

组合式API下的子传父 

基本思想
1. 父组件中给 子组件标签通过@绑定事件
2. 子组件内部通过 emit 方法触发事件

模版引用 

如何使用(以获取dom为例 组件同理)

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

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

defineExpose() 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/83236.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 安装 kibana

首先下载 kibana https://www.elastic.co/cn/downloads/kibana 然后上传到linux /usr/local 目录下解压安装 修改config/kibana.yml 配置文件&#xff0c;将elasticsearch.hosts 然后再nginx 中做一个端口映射&#xff0c;实现在浏览器中输入后xxxx:5602 nginx 可以将请求转发…

02-前端基础第二天-HTML5

01-HTML标签&#xff08;下&#xff09;导读 目标&#xff1a; 能够书写表格能够写出无序列表能够写出3~4个常用input表单类型能够写出下拉列表表单能够使用表单元素实现注册页面能够独立查阅W3C文档 目录&#xff1a; 表格标签列表标签表单标签综合案例查阅文档 02-表格标…

使用VSCode配置简单的vue项目

由于最近要使用的项目框架为前后端分离的&#xff0c;采用的是vue.jswebAPI的形式进行开发的。因为之前我没有接触过vue.js&#xff0c;也只是通过视频文档做了一些简单的练习。今天技术主管说让大家熟悉下VSCode开发vue&#xff0c;所以自己摸索了好久&#xff0c;才算是把简单…

矩阵乘法(C++ mpi 并行实现)

矩阵乘法有2种思路&#xff0c;我最先想到的是第一种思路&#xff0c;但是时间、空间复杂度都比较高。后面参考了一些资料&#xff0c;实现了第二种思路。 一、思路1&#xff1a;按行、列分块 矩阵乘法有一个很好的性质&#xff0c;就是结果矩阵的每个元素是不互相依赖的&…

AIGC音视频工具分析和未来创新机会思考

编者按&#xff1a;相较于前两年&#xff0c;2023年音视频行业的使用量增长缓慢&#xff0c;整个音视频行业遇到瓶颈。音视频的行业从业者面临着相互竞争、不得不“卷”的状态。我们需要进行怎样的创新&#xff0c;才能从这种“卷”的状态中脱离出来&#xff1f;LiveVideoStack…

ZooKeeper的应用场景(集群管理、Master选举)

5 集群管理 随着分布式系统规模的日益扩大&#xff0c;集群中的机器规模也随之变大&#xff0c;因此&#xff0c;如何更好地进行集群管理也显得越来越重要了。 所谓集群管理&#xff0c;包括集群监控与集群控制两大块&#xff0c;前者侧重对集群运行时状态的收集&#xff0c;后…

dolphinscheduler的僵尸任务清理和清理一直在运行的任务状态

dolphinscheduler的僵尸任务清理 界面操作不了的 只能去数据库更改状态或则删除掉 原因&#xff1a;海豚调度中有几百条僵尸任务&#xff0c; 界面怎么也删不掉&#xff0c;想从数据库中删除&#xff0c;开始查找从数据库删除的办法。 参考以下脚本&#xff0c;结合我库中僵尸…

Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

前文讲解&#xff0c;完成了springboot、spring security、Oauth2.0的继承&#xff0c;实现了对系统资源的安全授权、允许获得授权的用户访问&#xff0c;也就是实现了单一系统的全部技术开发内容。 Springboot是微服务框架&#xff0c;单一系统只能完成指定系统的功能&#xf…

Spring Boot中使用validator如何实现接口入参自动检验

文章目录 一、背景二、使用三、举例 一、背景 在项目开发过程中&#xff0c;经常会对一些字段进行校验&#xff0c;比如字段的非空校验、字段的长度校验等&#xff0c;如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护&#xff0c;如何更加规范和优…

智汇云舟携三大系列产品亮相第68届中国安防工程商集成商大会

8月18日&#xff0c;由中国安全防范产品行业协会指导&#xff0c;永泰传媒主办的中国安防工程商&#xff08;系统集成商&#xff09;大会暨第68届中国安防新产品、新技术成果展示在广州盛大开幕。 来自华南各省、市安防协&#xff08;学&#xff09;会及全国安防工程商、系统集…

计算机视觉之三维重建(一)(摄像机几何)

针孔摄像机 添加屏障&#xff1a; 使用针孔(o光圈针孔摄像机中心)&#xff0c;实现现实与成像一对一映射&#xff0c;减少模糊。其中针孔与像平面的距离为f(焦距)&#xff1b;虚拟像平面位于针孔与真实物体之间&#xff0c;与像平面互为倒立关系。位置映射&#xff1a;利用相似…

【内网监控】通过cpolar实现远程监控

【内网监控】通过cpolar实现远程监控 文章目录 【内网监控】通过cpolar实现远程监控前言1. 在cpolar官网预留一个空白隧道2. 完成空白数据隧道&#xff0c;生成地址3. 设置空白隧道的出口4. 空白数据隧道的出口设置5. 获取公网地址6. 打开本地电脑“远程桌面”7. 打开Windows自…

jenkins gitlab 安装

目录 一 准备安装环境 二 安装gitlab软件 三 配置gitlab 四 重新加载配置启动gitlab 五 修改密码 五 创建用户组 一 准备安装环境 sudo yum update sudo yum install -y curl policycoreutils-python openssh-server安装 Postfix 邮件服务器&#xff0c;以便 Git…

2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)

如今&#xff0c;消费者更加谨慎&#xff0c;消费决策也更加理性。在这一消费环境下&#xff0c;美妆护肤市场中&#xff0c;面对动辄几百上千的化妆品&#xff0c;小样或体验装无疑能够降低消费者的试错成本。由此&#xff0c;这门生意也一直备受关注。 并且&#xff0c;小样…

Webshell实例分析解析

Webshell的实例分析 LD_PRELOAD的劫持在 web 环境中实现基于 LD_PRELOAD 的 RCE 命令执行利用 mail 函数启动新进程 绕过不含字母和数字的Webshell异或取反 LD_PRELOAD的劫持 LD_PRELOAD是Linux/Unix系统的一个环境变量&#xff0c;它影响程序的运行时的链接&#xff08;Runti…

idea创建javaweb项目,jboss下没有web application

看看下图这个地方有没有web application

毫米波雷达成像论文阅读笔记: IEEE TPAMI 2023 | CoIR: Compressive Implicit Radar

原始笔记链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486680&idx1&snedf41d4f95395d7294bc958ea68d3a68&chksmcf51be21f826373790bc6d79bcea6eb2cb3d09bb1860bba0af0fd5e60c448ca006976503e460#rd ↑ \uparrow ↑点击上述链接即…

在IDEA中创建properties配置文件

第一步&#xff1a;在 src路径下找到resources文件 第二步&#xff1a;右击选择新建Resource Bundle配置文件 第三步&#xff1a;为Resource Bundle配置文件命名 完成创建

ssm+vue校园美食交流系统源码

ssmvue校园美食交流系统源码和论文026 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多商…

【Mybatis源码分析】解析语句标签_Select|Update|Insert|Delete

解析语句标签 Select|Update|Insert|Delete 一、前言二、语句标签的源码分析三、sql 标签的解析四、总结 一、前言 在阐述解析语句标签之前&#xff0c;得先知道我们的语句标签内容最后被封装到Configuration哪&#xff1f;&#xff08;都应该知道 Mybatis 通过的是 XMLConfig…