Vue3 基础语法指南:响应式系统与 Ref 应用

news2025/3/22 10:06:02
1、Reactive 的深度响应式

1.1、基本用法

vue

<script setup>
import { reactive } from 'vue'

const state = reactive({
  count: 0,
  user: {
    name: 'Alice',
    age: 30
  }
})

const increment = () => state.count++
const updateName = () => state.user.name = 'Bob'
</script>

1.2、Todolist 实战

vue

<script setup>
import { reactive } from 'vue'

const state = reactive({
  todos: [
    { id: 1, text: 'Learn Vue3', done: false }
  ],
  newTodo: ''
})

const addTodo = () => {
  state.todos.push({
    id: Date.now(),
    text: state.newTodo,
    done: false
  })
  state.newTodo = ''
}
</script>
2、Ref 的灵活应用

2.1、基础使用

vue

<script setup>
import { ref } from 'vue'

const count = ref(0)
const user = ref({ name: 'Alice' })

const increment = () => count.value++
const updateName = () => user.value.name = 'Bob'
</script>

2.2、Ref vs Reactive

特性RefReactive
适用类型基本类型 / 对象类型对象类型
响应式本质通过.value 访问响应式数据直接访问响应式数据
深层响应对象类型自动转为 Reactive深度响应
性能优化基本类型更高效对象类型更高效

使用原则

javascript

// 基本类型
const num = ref(0)

// 浅层次对象
const user = ref({ name: 'Alice' })

// 深层次对象
const complex = reactive({
  a: { b: { c: 0 } }
})

2.3、标签与组件引用

DOM 元素引用

vue

<template>
  <h1 ref="title">Hello Vue3</h1>
  <button @click="updateTitle">Update</button>
</template>

<script setup>
import { ref } from 'vue'

const title = ref<HTMLHeadingElement>(null)
const updateTitle = () => {
  title.value.style.color = 'red'
  title.value.textContent = 'Updated!'
}
</script>

组件实例引用

vue

<!-- 父组件 -->
<template>
  <MyComponent ref="child" />
  <button @click="callChildMethod">Call Child</button>
</template>

<script setup>
import MyComponent from './MyComponent.vue'
import { ref } from 'vue'

const child = ref()
const callChildMethod = () => {
  child.value.sayHello()
  console.log(child.value.count)
}
</script>

<!-- 子组件 -->
<script setup>
import { ref, defineExpose } from 'vue'

const count = ref(0)
const sayHello = () => console.log('Hello!')

defineExpose({
  count,
  sayHello
})
</script>
总结对比
功能点Setup 函数ReactiveRef
作用组件逻辑入口深度响应式对象灵活响应式变量
适用场景所有组合式 API 使用复杂对象状态管理基础类型 / 简单对象管理
性能考量优先使用组合式 API对象层级越深越推荐基本类型优先
特殊能力访问 props/context自动依赖收集模板引用

通过合理运用这些特性,可以构建出更高效、更易维护的 Vue3 应用。

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

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

相关文章

xLua_003 Lua访问C#

1、new C# 对象&#xff08;创建游戏物体&#xff09; LuaCallCSharp.cs using UnityEngine; using XLua;public class LuaCallCSharp : MonoBehaviour {public LuaEnv env null;void Start(){LuaEnv env new LuaEnv();env.DoString("requireLuaCallCSharp");}pr…

mysql 磐维(opengauss)tidb误删数据之高级恢复

Mysql参考&#xff1a; Mysql 8.0 XtraBackupMysqlbinlog 完全恢复 - 墨天轮 Mysql 8.0 XtraBackupMysqlbinlog 完全恢复[TOC]# 一、安装mysql 8.0.19## 1.1https://www.modb.pro/db/509223MySQL 的全量备份、增量备份与 Binlog 时间点恢复_mysqlbinlog自动备份吗-CSDN博客文章…

字符指针的三道例题+算法改进

目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵&#xff0c;每行从左到右递增&#xff0c;每列从上到下递增&#xff0c;编写程序在矩…

如何构建简单有效的AI Agents代理?

工程技术 在过去的一年里&#xff0c;我们与数十个跨行业的团队合作&#xff0c;构建基于大型语言模型&#xff08;LLM&#xff09;的代理。我们发现&#xff0c;最成功的实现并不是使用复杂的框架或专门的库&#xff0c;而是采用简单、可组合的模式。 在本文中&#xff0c;我…

【虚幻引擎UE5】SpawnActor生成Character实例不执行AI Move To,未初始化AIController的原因和解决方法

虚幻引擎版本&#xff1a;5.5.4 问题描述 刚创建的Third Person项目里&#xff0c;定义一个BP_Enemy蓝图&#xff0c;拖拽到场景中产生的实例会追随玩家&#xff0c;但SpawnActor产生的实例会固定不动。BP_Enemy蓝图具体设计如下&#xff1a; BP_Enemy的Event Graph ​​ 又定义…

查看GPU型号、大小;CPU型号、个数、核数、内存

GPU型号、大小 nvidia-smiCPU型号 cat /proc/cpuinfo | grep model name | uniqCPU个数 cat /proc/cpuinfo | grep "physical id" | uniq | wc -lCPU核数 cat /proc/cpuinfo | grep "cpu cores" | uniqCPU内存 cat /proc/meminfo | grep MemTotal参考…

xcode中移除安装的package dependency

有的依赖包安装之后&#xff0c;没有用&#xff0c;所以就需要把这个依赖项去掉&#xff0c;找了好久没有找到在哪里&#xff0c;最后发现在项目详情里面&#xff1a; 选中这一项&#xff0c;然后删除就可以了

星越L_ 雨刷使用功能讲解

目录 1.向下拨动 2,向上拨动 3.调节雨刷的灵敏度 4.再次向上拨动 5.再向上 6.向内侧拨动 7.后雨刷开启 8.向外侧拨动 9.更换雨刷 1.向下拨动 雨刷单次工作 2,向上拨动 自动雨刷开启 3.调节雨刷的灵敏度 转动滚轮调节雨刷的灵敏度

卷积神经网络 - 梯度和反向传播算法

在卷积网络中&#xff0c;参数为卷积核中权重以及偏置。和全连接前馈网络类似&#xff0c;卷积网络也可以通过误差反向传播算法来进行参数学习。本文我们从数学角度&#xff0c;来学习卷积神经网络梯度的推导和其反向传播算法的原理。 一、梯度&#xff1a;损失函数 L 关于第 …

基于 Java 和深度学习的图像分类应用实践

前言 随着人工智能技术的飞速发展,深度学习在图像处理、自然语言处理等领域展现出强大的能力。然而,许多开发者认为深度学习只能依赖 Python 的框架(如 TensorFlow 或 PyTorch)。事实上,Java 生态也有成熟的深度学习库,如 Deeplearning4j(DL4J),适合企业级应用场景。…

如何实现园区零碳管理?安科瑞EMS3.0推动园区低碳转型

当工业园区电费年耗超千万、碳排数据成监管红线&#xff0c;传统“拉闸限电”式管理已无法应对双碳倒计时——如何让光伏、储能、充电桩“听懂指令”&#xff0c;让每一度电创造3倍价值&#xff1f;187*210*98*782 一、零碳园区管理的三大痛点 1. 能源错配严重&#xff1a;风…

Python Django入门(创建其他网页)

在本章中&#xff0c;你将学习如何使用 Django&#xff08;http://djangoproject.com/ &#xff09;来开发一个名为“学习笔记”&#xff08;Learning Log&#xff09;的项目&#xff0c;这是一个在线日志系统&#xff0c;让你能够记录所学习的有关特定主题的知识。 我们将为这…

Error: The resource name must start with a letter

Error: The resource name must start with a letter 这个错误通常是由于资源名称&#xff08;如布局文件、字符串资源、ID 等&#xff09;不符合命名规则导致的。Android 资源名称必须遵循以下规则&#xff1a; 必须以字母开头&#xff08;不能以数字或下划线开头&#xff09…

2025年- G23-Lc97-104.二叉树的最大深度-java版(递归调用左右子树)

1.题目描述 2.思路 要用到max函数&#xff0c;返回的时候返回左右子树的最大值。其次要递归调用左右子树&#xff0c;寻找最大深度。 在每个递归返回时&#xff0c;我们 必须把当前节点的深度算进去&#xff0c;否则我们只计算了子树的深度&#xff0c;而没有包括当前节点。 …

Powershell WSL Windows系统复制数据到ubuntu子系统系统

从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…

到底爱不爱我

L2-3 到底爱不爱我 古代少女有了心上人时&#xff0c;会悄悄折一条树枝&#xff0c;揪那枝上的叶子&#xff0c;揪一片叶子念一句“爱我”&#xff0c;再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候&#xff0c;看看是停在“爱”还是“不爱”。 但聪明的慧娘一眼洞…

Python 3.13.2安装教程(安装包)Python 3.13.2 快速安装指南

文章目录 前言一 、Python 3.13.2下载二、Python 3.13.2安装教程1.运行安装程序2.选择安装方式3.自定义安装选项4.开始安装5.安装完成6.打开程序7.验证安装 前言 Python 作为一门通用编程语言&#xff0c;在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库&#xff0c;使…

Linux驱动学习笔记(六)

平台总线 1.平台总线模型也叫platform总线模型&#xff0c;平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分&#xff1a;platform_device和platform_driver&#xff0c;例如可使用文件device.c和d…

w264民族婚纱预定系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

Compose 实践与探索十五 —— 自定义触摸

1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier&#xff1a; Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了&#xff0c;直接去讲解更复杂的…