01.setup,reactive,ref,computed,watch学习---2023新版Vue3基础入门到实战项目

1.Vue3组合式

2.创建vue3项目

2.1认识create-vue

create-vue是官方新的脚手架工具,vite下一代构建工具
node -v >16
npm init vue@latest

2.2 setup

原始写法

<script>
export default {//执行时机比beforeCreate早//获取不到this//数据和函数必须return出去setup() {//数据const message = 'hello vue3'//函数const logMessage = () => {console.log(message)}return {message, logMessage}},beforeCreate() {console.log('beforeCreate函数')}
}
</script>
<template><h1>{{ message }}</h1><button @click="logMessage">点我</button>
</template>

语法糖写法:

<script setup>
const message = 'this is message'
const logMessage = () => {console.log(message);
}
</script>
<template><h1>{{ message }}</h1><button @click="logMessage">点我</button>
</template>

总结:

1.setup选项的执行时机?
beforeCreate钩子之前,自动执行
2.setup写代码的特点是什么?
定义数据+函数,然后以对象方式return
3.setup解决了什么问题?
经过语法糖的封装更简单的使用组合式API
4.setup中的this还指向组件实例吗?
不指向,组件实例还未创建,undefined

2.3 reactive()

接收对象类型数据的参数传入,返回响应式对象

<script setup>
//接收对象类型数据的参数传入,返回响应式对象
import { reactive } from 'vue'
const state = reactive({count: 100
})
const addOne = () => {state.count++
}
</script>
<template><div><div>{{ state.count }}</div><button @click="addOne">+1</button></div>
</template>

2.4 ref()

如果是简单类型,用ref() 推荐
接收简单类型和对象类型数据传入并返回响应式对象
本质是对传入数据包了一层,包成复杂类型之后,再借助reactive实现响应式。
脚本中访问数据需要通过.value,非脚本区域直接使用数据

<script setup>
//接收对象类型数据的参数传入,返回响应式对象
import { ref } from 'vue'
const count = ref(0)
console.log(count.value);
const addOne = () => {count.value++
}
</script>
<template><div><div>{{ count }}</div><button @click="addOne">+1</button></div>
</template>

总结:

1.reactive和ref函数共同作用是什么?
用函数调用的方式生成响应式数据
2.reactive vs ref?
reactive不能处理简单类型的数据
ref参数类型支持更好但是必须通过.value访问修改
ref函数的内部实现依赖于reactive函数
3.在实际工作中推荐使用哪个?
推荐使用ref函数,更加灵活统一

2.5 computed

最佳实践:不应该有副作用,异步请求,修改dom,避免直接修改计算属性的值。

<script setup>
import { ref, computed } from 'vue'
//声明数据
const list = ref([1, 2, 3, 4, 5, 6, 7, 8]
)
//基于list派生一个计算属性,从list中过滤出 > 2
const computedList = computed(() => {return list.value.filter(item => item > 2)
})
//定义一个修改数组的方法
const addFn = () => {list.value.push(666)
}
</script>
<template><div><div>原始数据:{{ list }}</div><div>计算后的数据:{{ computedList }}</div><button @click="addFn">修改</button></div>
</template>

2.6 watch

侦听简单对象和复杂对象以及immediate和deep,精确侦听对象的某个属性

<script setup>
import { ref, watch } from 'vue'
const count = ref(0)
const nickname = ref('张三')
const changeCount = () => {count.value++
}
const changeNickName = () => {nickname.value = nickname.value + '三'
}
//1.监视单个数据的变化
//watch(ref对象,(newValue,oldValue)=>{...})
// watch(count, (newValue, oldValue) => {
//   console.log(newValue, oldValue)
// })
// watch(nickname, (nv, ov) => {
//   console.log(nv, ov);
// })
//监视多个数据的变化
//watch([ref1,ref2],(newArr,oldArr)=>{...})
/* watch([count, nickname], (newArr, oldArr) => {console.log(newArr, oldArr);
}) */
//立刻执行immediate
/* watch([count, nickname], (newArr, oldArr) => {console.log(newArr, oldArr);
}, {immediate: true
}) */
//深度监视 deep,默认是浅层监视,ref简单类型,直接监视,ref2复杂类型,监视不到内部数据变化
const userInfo = ref({name: 'zs',age: 18
})
const setUserInfo = () => {userInfo.value.age++
}
/* watch(userInfo, (nv, ov) => {console.log(nv, ov)
}, {deep: true//深度监视,对象子属性变化也能监视到
}) */
//对于对象中的属性来进行监视,固定写法
watch(() => userInfo.value.age, (nv, ov) => {console.log(nv, ov);
})
</script>
<template><div>{{ count }}</div><button @click="changeCount">改数字</button><div>{{ nickname }}</div><button @click="changeNickName">改昵称</button><div>------------------------------------------</div><br><div>{{ userInfo }}</div><button @click="setUserInfo">修改userinfo</button>
</template>

总结:

1.watch第一个参数需要加.value吗?
不需要
2.只能侦听单个数据吗?
单个或者多个
3.不开启deep,直接监视复杂类型,修改属性,能触发回调吗?
不能,默认浅层监听
4.不开启deep,精确侦听对象的某个属性?
可以把第一个参数写成函数的写法,返回要监听的具体属性。

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

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

相关文章

Java实战:高效提取PDF文件指定坐标的文本内容

前言 临时接到一个紧急需要处理的事项。业务侧一个同事有几千个PDF文件需要整理&#xff1a;需要从文件中的指定位置获取对应的编号和地址。 要的急&#xff0c;工作量大。所以就问到技术部有没有好的解决方案。 问技术的话就只能写个demo跑下了。 解决办法 1. 研究下PDF文档…

案例15 Spring Boot入门案例

1. 选择Spring Initializr快速构建项目 ​ 2. 设置项目信息 ​ 3. 选择依赖 ​ 4. 设置项目名称 ​ 5. 项目结构 ​ 6. 项目依赖 自动配置了Spring MVC、内置了Tomcat、配置了Logback(日志)、配置了JSON。 ​ 7. 创建HelloController类 com.wfit.boot.hello目录下创建HelloCo…

Less和Sass的原理和用法

一、原理 1.1 Less定义&#xff1a;是一种动态的样式语言,使CSS变成一种动态的语言特性&#xff0c;如变量、继承、运算、函数。Less既可以在客户端上面运行(支持IE6以上版本、Webkit、Firefox),也可以在服务端运行(Node.js) 1.2 SaSS定义&#xff1a;是一种动态样式语言&#…

开发过程中遇到的问题以及解决方法

巩固基础&#xff0c;砥砺前行 。 只有不断重复&#xff0c;才能做到超越自己。 能坚持把简单的事情做到极致&#xff0c;也是不容易的。 开发过程中遇到的问题以及解决方法 简单易用的git命令 git命令&#xff1a; 查看有几个分支&#xff1a;git branch -a 切换分支&#…

Azure创建第一个虚拟机

首先&#xff0c;登录到 Azure 门户 (https://portal.azure.com/)。在 Azure 门户右上角&#xff0c;点击“虚拟机”按钮&#xff0c;并点击创建&#xff0c;创建Azure虚拟机。 在虚拟机创建页面中&#xff0c;选择所需的基本配置&#xff0c;包括虚拟机名称、操作系统类型和版…

【JVM】JVM 调优的参数都有哪些?

文章目录 1. 设置堆空间大小2. 虚拟机栈的设置3. 年轻代中Eden区和两个Survivor区的大小比例4. 年轻代晋升老年代阈值5. 设置垃圾回收收集器 1. 设置堆空间大小 设置堆的初始大小和最大大小&#xff0c;为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间&…

python编程小游戏简单的,python小游戏编程100例

大家好&#xff0c;给大家分享一下python编程小游戏简单的&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 不会python就不能用python开发入门级的小游戏&#xff1f; 当然不是&#xff0c;我收集了十个python入门小游戏的源码和教程&#…

分支语句和循环语句(1)

这篇文章我们详细的把分支语句和循环语句给大家进行讲解。 分支语句&#xff1a; if switch 循环语句&#xff1a; while for do while goto语句&#xff1a; 1.什么是语句&#xff1f; C语句可分为以下五类&#xff1a; 1. 表达式语句 2. 函数调用语句 3. 控制…

qt自己实现方便的线程管理类

看本博客之前&#xff0c;可以先看看我这篇多线程博客&#xff1a;qt多线程使用方式_我是标同学的博客-CSDN博客

ORCA优化器浅析——CDXLOperator Base class for operators in a DXL tree

如上图所示&#xff0c;CDXLOperator作为Base class for operators in a DXL tree&#xff0c;其子类CDXLLogical、CDXLScalar、CDXLPhysical作为逻辑节点、物理节点和Scalar节点的DXL表示类&#xff0c;因此其包含了这些类的共同部分特性&#xff0c;比如获取其DXL节点表示的函…

Qt 文件对话框使用 Deepin风格

当你在Deepin或UOS 上开发 Qt 程序时&#xff0c;如果涉及到文件对话框功能&#xff0c;那么就会遇到调用原生窗口的问题。 如果你使用的是官方的Qt版本&#xff0c;那么在Deepin或者UOS系统上&#xff0c;弹出的文件对话框会是如下这样&#xff1a; 而Deepin或UOS系统提供的默…

可视化高级绘图技巧100篇-总论

前言 优秀的数据可视化作品可以用三个关键词概括&#xff1a;准确、清晰、优雅。 准确&#xff1a;精准地反馈数据的特征信息&#xff08;既不遗漏也不冗余&#xff0c;不造成读者疏漏&误读细节&#xff09; 清晰&#xff1a;获取图表特征信息的时间越短越好 优雅&…

Gitlab CI/CD笔记-第二天-主机套接字进行构建并push镜像。

一、安装gitlab-runner 1.可以是linux也可以是docker的 2.本文说的是docker安装部署的。 二、直接上.gitlab-ci.yml stages: # List of stages for jobs, and their order of execution - build-image build-image-job: stage: build-image image: harbor.com:543/docke…

企业计算机服务器中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

随着计算机技术的不断发展&#xff0c;企业的办公系统得到了很大提升&#xff0c;但是随之而来的网络安全威胁也不断增加&#xff0c;勒索病毒的攻击事件时有发生。近期&#xff0c;我们收到某地连锁超市的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒攻击&#x…

C#四个字节十六进制与单精度浮点数互转

C#四个字节十六进制与单精度浮点数互转可以使用自带的函数,也可以自己写 实例如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace floatDemo {class Program{//首先设置:项目->属性…

html练习

html练习 工具代码运行结果 工具 HBuilder X 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>图灵之家</title></head><body><h1>图灵之家</h1><br><br><h2>我的…

Maxwell 数据同步使用教程

Maxwell 数据同步使用教程 Maxwell 是一个开源的 MySQL 数据同步工具&#xff0c;它可以提供可靠的、实时的数据复制服务。它的特点是将 MySQL 的 binlog 解析成易于理解、易于使用的 JSON 格式&#xff0c;并将其发送到 Kafka 或其他消息队列&#xff0c;方便消费者进行数据处…

使用几何和线性代数从单个图像进行 3D 重建

使用几何和线性代数从单个图像进行 3D 重建 萨蒂亚 一、说明 3D重构是一个挑战性题目&#xff0c;而且这个新颖的题目正处于启发和膨胀阶段&#xff1b;因此&#xff0c;各种各样的尝试层出不穷&#xff0c;本篇说明尝试的一种&#xff0c;至于其它更多的尝试&#xff0c;我们在…

nlohmann json:通过at读取及设置object和array

读取及设置: #include <iostream> #include <nlohmann/json.hpp> using namespace std; using json = nlohmann::json;int main() {json data = R"({"name": "xiaoming","age": 10, "parent": [{"father&qu…

RTT(RT-Thread)IO设备模型

目录 IO设备模型 模型框架原理 IO设备类型 创建和注册IO设备 RTT设备管理程序实现原理 访问IO设备 查找设备 初始化设备 打开设备 关闭设备 控制设备 读写设备 数据收发回调 数据接收回调 数据发送回调 设备模型实例 IO设备模型 RT-Thread 提供了一套简单的 I/O …