当前位置: 首页 > article >正文

简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

文章目录

    • 前言
    • Ref 响应式(基本数据类型)
    • Reactive 响应式(对象类型)
    • ref 对比 reactive

前言

重拾 Vue3,查缺补漏、巩固基础。

Ref 响应式(基本数据类型)

使用 ref 包裹,即可实现基本数据类型的响应式。

<template>
  <div class="person">
    <h2>{{ name }}</h2>
    <h2>{{ age }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
  </div>
</template>

<script lang="ts" setup>
import { ref } from "vue";
let name = ref("zhangsan");
let age = ref(18);
let tel = 18588888888;

function changeName() {
  name.value = "zs";
}

function changeAge() {
  age.value += 1;
}

function showTel() {
  alert(tel);
}
</script>

<style scoped>
.person {
  background-color: skyblue;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
button {
  margin: 0 5px;
}
</style>

Reactive 响应式(对象类型)

使用 reactive 包裹,即可实现基本数据类型的响应式。

<template>
  <div class="person">
    <h2>{{ car.brand }}: {{ car.price }}w</h2>
    <button @click="changePrice">修改价格</button>

    <ul v-for="item in person" :key="item.id">
      <li>{{ item.name }}</li>
    </ul>

    <button @click="changeFirstName">修改第一个人的名字</button>
  </div>
</template>

<script lang="ts" setup>
import { reactive } from "vue";

let car = reactive({ brand: "大奔", price: 80 });
let person = reactive([
  { id: 1, name: "zhangsan" },
  { id: 2, name: "lisi" },
  { id: 3, name: "zahuopu" },
]);

function changePrice() {
  car.price += 10;
}

function changeFirstName() {
  person[0].name = "hh";
}
</script>

<style scoped>
.person {
  background-color: skyblue;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
button {
  margin: 0 5px;
}
</style>

ref 对比 reactive

ref 创建的变量必须使用 .value,reactive 重新分配一个新对象,会失去响应式(可以通过 Object.assign 去替换整体)。

使用 reactive 实现对象响应式。

<template>
  <div class="person">
    <h2>{{ car.brand }}: {{ car.price }}w</h2>
    <button @click="changeCarInfo">修改汽车信息</button>
  </div>
</template>

<script lang="ts" setup>
import { reactive } from "vue";

let car = reactive({ brand: "大奔", price: 80 });

function changeCarInfo() {
  Object.assign(car, { brand: "小米", price: 29.98 });
}
</script>

使用 ref 实现对象的响应式。

<template>
  <div class="person">
    <h2>{{ car.brand }}: {{ car.price }}w</h2>
    <button @click="changeCarInfo">修改汽车信息</button>
  </div>
</template>

<script lang="ts" setup>
import { ref } from "vue";

let car = ref({ brand: "大奔", price: 80 });

function changeCarInfo() {
  car.value = { brand: "小米", price: 29.98 };
}
</script>

参考资料:
https://www.bilibili.com/video/BV1Za4y1r7KE?spm_id_from=333.788.player.switch&vd_source=f839085517d2b7548b2939bfe214d466&p=16


在这里插入图片描述



http://www.kler.cn/a/371437.html

相关文章:

  • 使用Python和OpenCV实现火焰检测
  • 2024年10月HarmonyOS应用开发者基础认证全新题库
  • [ 问题解决篇 ] 解决远程桌面安全登录框的问题
  • 论可以对抗ai编程的软件开发平台(直接把软件需求描述变成软件的抗ai开发平台)的设计
  • 【Spring Boot】元注解
  • D51【python 接口自动化学习】- python基础之模块与标准库
  • PyTorch模块介绍
  • 【IC每日一题】
  • 【架构-36】常见的各类锁的特点
  • C++学习:类和对象(二)
  • [ 问题解决篇 ] 解决远程桌面安全登录框的问题
  • 3个模型的交互式多模型IMM,基于EKF的目标跟踪实例(附MATLAB代码)
  • java web调试时清理当前网址的缓存
  • 3.1.3 虚存页面的映射
  • Java学习笔记(九)
  • 云原生后端:现代应用架构的核心力量
  • JavaWeb——Web入门(2/9)-SpringBootWeb:快速入门(入门程序需求、开发步骤、项目相关文件说明、小结)
  • 【Linux网络编程】 --- Linux权限理解
  • ICM20948 DMP代码详解(106)
  • 四、Hadoop 命令高级用法深度剖析
  • 前端之html(二)加入css开篇(一)
  • LeetCode72:编辑距离
  • javaScript中复制一个数组的浅拷贝和深拷贝方法
  • Flutter Web部署到子路径的打包指令
  • 单细胞数据分析(四):细胞亚型注释
  • uniapp写抖音小程序阻止右滑返回上一个页面