【Vue】3-2、组合式 API

一、setup 选项

<script>
export default {/*** 1、setup 执行时机早于 beforeCreate* 2、setup 中无法获取 this* 3、数据和函数需要在 setup 最后 return,才能在模板中使用* 4、可以通过 setup 语法糖简化代码*/setup(){// console.log('setup function', this)// 数据const msg = 'Hello Vue3'const logMsg = () => {console.log(msg)}return{msg,logMsg}},beforeCreate(){// console.log('beforeCreate function')}
}
</script> 

若未 return 在浏览器也会有警告  

每次都需要 return,若数据与函数的量很大,就会很麻烦,所以可以通过语法糖来简化代码  

<script setup>
const msg = 'Hello Vue3'
const logMsg = () => {console.log(msg)
}
</script><template><div>{{ msg }}</div><button @click="logMsg"></button>
</template>

二、reactive 和 ref 函数  

reactive():接收对象类型数据的参数传入并返回一个响应式的对象 

步骤:

  • 从 vue 中导入 reactive 函数

  • <script setup> 中执行 reactive 函数并传入类型为对象的初始值,并使用变量接收返回值

<script setup>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 实现响应式  

步骤:

  • 从 vue 中导入 ref函数

  • <script setup> 中执行 ref函数并传入类型为对象的初始值,并使用变量接收返回值

<script setup>
import { ref } from 'vue'const count = ref(0)
const setCount = () => {// 访问数据需要通过 .value【template中不需要】count.value++;
}
</script><template><div><div>{{ count }}</div><button @click="setCount">+1</button></div>
</template>

三、computed 

步骤:

  • 导入 computed 函数

  • 执行函数在回调函数中 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)
})const addFn = () => {list.value.push(9)
}
</script><template><div><div>原始数据:{{ list }}</div><div>计算后数据:{{ computedList }}</div><button @click="addFn">修改</button></div>
</template>

以上创建的是一个 只读 的计算属性 ref,若要创建一个 可写 的计算属性 ref,可以这样做:  

const count = ref(1)
const plusOne = computed({get: () => count.value + 1,set: (val) => {count.value = val - 1}
})plusOne.value = 1
console.log(count.value) // 0

在计算属性中不要进行异步请求或这修改 DOM 的操作

避免直接修改计算属性的值

四、watch 

侦听一个或者多个数据的变化,数据变化时执行回调函数  

<script setup>
import { ref, watch } from 'vue'
const count = ref(0)
const name = ref('cp')const setCount = () => {count.value++;
}const setName = () => {name.value = '张三 - 李四'
}// 侦听单个数据
watch(count, (newValue, oldValue) => {console.log(`count 值发生了变化,新值为 ${newValue},旧值为 ${oldValue}`)
})
// 侦听多个数据
watch([count, name],([newCount, newNode], [oldCount, oldName]) => {console.log('count 或 name 发生了变化', [newCount, newNode], [oldCount, oldName])
})
</script><template><div>{{ count }}</div><button @click="setCount">改数字</button><div>{{ name }}</div><button @click="setName">改名字</button>
</template>

两个参数:

  • immediate(立即执行)

  • deep(深度侦听)  

watch(count, ()=>{console.log('count变了')
},{immediate: true
})

watch 可以直接监视简单类型数据

const ref = ref(简单类型)

 watch 无法监视复杂类型内部数据的变化

const ref = ref(复杂类型)
watch(复杂类型对象, (newValue) => {console.log(newValue);
}, {deep: true
})

若没有添加 deep 参数,默认的是监听对象的地址是否变化,除非修改了对象的地址,否则不会被监听到。

若要监听复杂类型对象内部属性的变化,则需要添加 deep 参数,即可对其进行监听

精确监听对象的某个属性

在不开启 deep 的前提下,侦听对象属性的变化,只有属性变化时才执行回调

// 精确侦听某个属性
const info = ref({name: 'cp',age: 18
})
watch(() => info.value.age,() => console.log('age变了')
)

五、生命周期函数 

选项式 API组合式 API
beforeCreate/createdsetup
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBreforeUpdate
updateonUpdate
beforeUnmountonBeforeUnmount
unmountedonUnmounted
<script setup>
import { onMounted } from "vue"// 一进入页面就调用
const getList = () => {setTimeout(() => {console.log('发送请求,获取列表数据')}, 2000)
}
getList()// 在 mounted 时执行
onMounted(() => {console.log('mounted 生命周期函数 - 逻辑1')
})
// 写成函数的调用方式,可以调用多次,并不会冲突,而是按照顺序依次执行
onMounted(() => {console.log('mounted 生命周期函数 - 逻辑2')
})
</script>

六、父子通信 

1、父传子 

基本思想:

  • 父组件给子组件绑定属性

  • 子组件内部通过 props 选项接收  

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

2、子传父 

基本思想:

  • 父组件中给子组件标签通过 @绑定事件

  • 子组件内部通过 emit 方法触发事件  

七、模板引用

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

步骤:

  • 调用 ref 函数生成一个 ref 对象

  • 通过 ref 标识绑定 ref 对象到

<script setup>
import { ref } from 'vue'
// 通过 ref 函数获得一个 ref 对象
const h1Ref = ref(null)
</script><template><!-- 通过 ref 标识绑定 ref 对象 --><h1 ref="h1Ref">我是 DOM 标签 h1</h1>
</template>

获取模板引用的时机:组件挂载完毕  

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

<script setup>
import { ref } from 'vue'
const testMsg = ref('this is test msg')
defineExpose({testMsg
})
</script>

八、provide 和 inject  

作用:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信  

跨层传递普通数据

  • 顶层组件通过 provide 函数提供数据

  • 底层组件通过 inject 函数获取数据

// 顶层组件
provide('key', 顶层组件中的数据)// 底层组件
const msg = inject('key')

顶层组件可以向子层组件传递方法,底层组件调用方法修改顶层组件中的数据【实际在修改数据的依然是顶层组件】

一  叶  知  秋,奥  妙  玄  心

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云服务器安全组、防火墙、端口问题,结合telnet解决项目部署无法访问

无论是运维还是后台亲自操刀在云服务器上部署项目&#xff0c;往往会遇到项目部署上去了&#xff0c;也确定项目正常运行&#xff0c;但还是没法访问的问题。 如果没有经验的小伙伴&#xff0c;很容易陷入疑惑的状态&#xff0c;无从下手解决。 其实这涉及到云平台安全组、服…

计算机毕业设计社区居民服务管理系统SSM

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; vue mybatis Maven mysql5.7或8.0等等组成&#xff0c;B…

25.云原生之ArgoCD-app of apps模式

文章目录 app of apps 模式介绍app如何管理apphelm方式管理kustomize方式管理 app of apps 模式介绍 通过一个app来管理其他app&#xff0c;当有多个项目要发布创建多个app比较麻烦&#xff0c;此时可以创建一个管理app&#xff0c;管理app创建后会创建其他app。比较适合项目环…

【Power Platform】实现对SharePoint文档库中上传的文件进行审批

这次要分享的案例还是来自于我们客户的一个新需求。 我们这个客户主要是在使用SharePoint的List来搭建申请单&#xff0c;然后对申请单进行审批&#xff0c;但由于我们之前给客户提出的生成PDF打印件的方案&#xff0c;是需要先在SharePoint或OneDrive中放一个文档模板的&…

2024 高级前端面试题之 HTTP模块 「精选篇」

该内容主要整理关于 HTTP模块 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTTP模块精选篇 1. HTTP 报文的组成部分2. 常见状态码3. 从输入URL到呈现页面过程3.1 简洁3.2 详细 4. TCP、UDP相关5. HTTP2相关6. https相关7. WebSocket的…

计算存储设备(Computational Storage Drive, CSD)

随着云计算、企业级应用以及物联网领域的飞速发展&#xff0c;当前的数据处理需求正以前所未有的规模增长&#xff0c;以满足存储行业不断变化的需求。这种增长导致网络带宽压力增大&#xff0c;并对主机计算资源&#xff08;如内存和CPU&#xff09;造成极大负担&#xff0c;进…

网络协议与攻击模拟_14DNS欺骗

DNS欺骗就是利用某种方式将我们访问的域名解析到其他服务器上&#xff0c;从而使得我们无法正常访问到原本我们想要访问的网站。 一、DNS欺骗过程 首先在windows server 2016虚拟机上搭建网站服务&#xff0c;kali作为攻击机从而实现中间人攻击&#xff0c;使用ettercap工具的…

构造函数 | 初始化列表 | 拷贝构造 | 赋值运算符重载

文章目录 1.类的6个默认成员函数2.构造函数2.1基本概念和用法2.2初始化列表2.3explicit关键字 3.拷贝构造函数4.重载赋值运算符 1.类的6个默认成员函数 如果定义一个空类&#xff0c;其实并不是什么都没有&#xff0c;编译器会默认生成6个默认的成员函数&#xff01;默认成员函…

从源代码看Chrome 版本号

一直以来都是用Chrome 浏览器&#xff0c;但是看到Chrome 点分4 组数据的表达方式&#xff0c;总是感觉怪怪的&#xff0c;遂深入源代码了解她的版本号具体表示的内容 chrome 浏览器中显示的版本号 源代码中的版本号标识 版本号文件位于 chrome/VERSION &#xff0c; 看到源代…

网络流数据集处理(深度学习数据处理基础)

一、数据集处理 处理数据集是一个文件夹 一个文件夹处理的&#xff0c;将原网络流数据集 放入一个文件夹 处理转换成 Json文件。&#xff08;数据预处理&#xff09;然后将这些文件处理成目标文件格式 再分割成训练集和测试集。每次运行只会处理一个文件夹。 运行train.py 导入…

Windows10 安装 OpenSSH 配置 SFTP服务器

1、下载 https://github.com/PowerShell/Win32-OpenSSH/releases 2、默认安装 3、创建用户 4、修改配置文件 C:\ProgramData\ssh\sshd_config# 最后一行后面加入 ForceCommand internal-sftp# 设置用户登录后默认目录 Match User sftpuser ChrootDirectory C:\SFTP# Disable…

进程信号-

一.信号概念 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 二.信号的产生 1.通过键盘进行信号的产生。&#xff08;1-31多数都是杀掉进程&#xff09; &#xff08;ctrl c&#xff1a;向前台进程发送2号信号&#xff0c;杀掉进程&#xff09; &#xff0…

基于JAVA的宠物管理系统

技术架构&#xff1a; Servlet JSP MySQL 有需要该项目的小伙伴可以私信我你的Q。 功能介绍&#xff1a; 系统主要分为前台和后台两大模块 前台主要由用户体验使用: 用户登录 注册 查找商品 商品类别等功能导航&#xff1b; 后台…

Github 2024-02-03 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-03统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目6C项目1TypeScript项目1JavaScript项目1PowerShell项目1Rust项目1 MLflow: 机器学习生命周期平台 …

AI监控+智能充电桩系统如何缓解新能源汽车充电难问题

在新能源汽车行业的快速发展中&#xff0c;充电桩作为重要的配套设施&#xff0c;其建设和发展至关重要。随着新能源汽车销量的增长&#xff0c;补能需求也日益迫切&#xff0c;这为充电桩行业的发展提供了巨大的机遇。然而&#xff0c;充电桩行业在快速发展的同时&#xff0c;…

[云顶数模]2024美赛CEF题成品参考论文+配套数据集+可执行代码+运行结果图

E题社区抗灾能力综合评估与决策模型研究 摘要&#xff1a;社区抗灾能力的提升对于灾害风险管理至关重要。本研究基于机器学 习方法&#xff0c;构建了社区抗灾能力预测模型&#xff0c;以评估社区在灾害事件中的表现。首先&#xff0c; 我们采用梯度提升树模型对社区基础设施、…

Prometheus 采集Oracle监控数据

前言 oracledb_exporter是一个开源的Prometheus Exporter,用于从Oracle数据库中收集关键指标并将其暴露给Prometheus进行监控和告警。它可以将Oracle数据库的性能指标转换为Prometheus所需的格式,并提供一些默认的查询和指标。 download Oracle Oracle Windows Install …

【Docker】网络配置network详解

一&#xff0c;network的概述 解决痛点&#xff08;能干什么&#xff1f;&#xff09;&#xff1a; &#xff08;1&#xff09;容器间的互联和通信以及端口映射 &#xff08;2&#xff09;容器IP变动时候&#xff0c;可以通过服务名直接网络通信而不受到影响 二&#xff0c;n…

功率信号的频谱

目录 1. 前言2. 功率信号的频谱3. 参考资料 1. 前言 知识点1&#xff1a;函数周期性判定定理   假设函数 f ( x ) f(x) f(x) 和函数 g ( x ) g(x) g(x) 均为周期性函数&#xff0c;其最小正周期分别为 T f T_f Tf​ 和 T g T_g Tg​&#xff0c;若 T f / T g T_f/T_g T…

搜索引擎评价指标及指标间的关系

目录 二分类模型的评价指标准确率(Accuracy,ACC)精确率(Precision,P)——预测为正的样本召回率(Recall,R)——正样本注意事项 P和R的关系——成反比F值F1值F值和F1值的关系 ROC&#xff08;Receiver Operating Characteristic&#xff09;——衡量分类器性能的工具AUC&#xff…