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

个人简介

👀个人主页: 前端杂货铺

🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展

📃个人状态: 研发工程师,现效力于中国工业软件事业

🚀人生格言: 积跬步至千里,积小流成江海

🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

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

文章目录

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

前言

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

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

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

javascript 复制代码
<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 包裹,即可实现基本数据类型的响应式。

javascript 复制代码
<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 实现对象响应式。

javascript 复制代码
<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 实现对象的响应式。

javascript 复制代码
<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



相关推荐
caoerzhong5 小时前
JeeWMS 开源仓库管理系统权限与域验证解析:Java WMS 如何把数据权限管到仓、货主与人
java·python·开源·vue
caoerzhong5 小时前
JeeWMS 开源仓库管理系统多租户架构解析:一套 Java WMS 如何同时服务多个货主与多个仓库
java·架构·开源·vue
ynchyong7 小时前
VUE 中 不能将类型“R[]”分配给类型“UnwrapRefSimple<R>[]”
typescript·vue·ts·unwraprefsimple
Leaderxin12 小时前
还在用 Electron?6 种跨平台桌面方案横评:Rust + Vue 把安装包从 224MB 干到 4.7MB
rust·vue·跨平台·tauri·桌面应用
YWL13 小时前
vue-time-axis-plus进阶:双进度条+跨空白续播+播放指针,打造专业级监控回放体验
前端·javascript·vue·时间轴
RuoyiOffice14 小时前
SpringBoot3+Vue3 项目立项到甘特:审批冻结台账、任务树怎么汇进度
spring boot·项目管理·vue3·甘特图·wbs·spring boot 3·立项审批
RuoyiOffice3 天前
SpringBoot3+Vue3 招聘 Offer:发出、审批通过、转入职怎么走完
spring boot·vue3·offer·入职·spring boot 3·hrm·招聘管理
尾善爱看海4 天前
Vue 面试进阶篇:Composition API、插槽、自定义指令……8 个章节 + 高频面试题全解析
前端·javascript·vue.js·面试·vue
明耀5 天前
vue chart 强行刷新高度,宽度
vue
YWL5 天前
OpenLayers弹窗Overlay深度实战
前端·vue·openlayers