首页 > 其他分享 >Vue3——toRef和toRefs

Vue3——toRef和toRefs

时间:2024-06-12 22:55:01浏览次数:10  
标签:name area weapon toRefs toRef let Vue3

toRef和toRefs作用

toReftoRefs功能相同,都是将一个响应式对象中的每个属性,转成ref对象,但是toRefs可以批量转换。

语法:> let temp = toRef(对象.属性名)let{temp1,temp2,temp3,...} = toRefs(对象)

模版中使用

运行结果

代码

  <template>
    <div class="root">
      <h2> 角色1姓名:{{ name }} </h2>
      <h2> 角色地区:{{ area }} </h2>
      <h2> 角色1武器:{{ weapon }} </h2>

      <button @click="changeRole1Name">更改角色1姓名</button>
      <button @click="changeArea">更改角色地区</button>
      <button @click="changeRole1Weapon">更改角色1武器</button>

    </div>
  </template>

<!--Vue 3 setup语法糖 -->
<script setup lang='ts' name="App">
import { reactive, ref, toRef, toRefs } from 'vue';

interface Role {
  //角色名字
  name: string;
  //角色所属地区
  area: string;
  //角色武器
  weapon: string;
}

//可以填泛型,也可以不填泛型
let role = reactive<Role>({
  name: "万叶",
  area: "稻妻",
  weapon: "苍古自由之誓"
})

let role1 = ref<Role>({
  name: "钟离",
  area: "璃月",
  weapon: "黑樱枪"
})

//使用toRef将role对象中的area属性取出,且取出的属性依然是保持响应式
let area = toRef(role.area);
//使用toRefs将role1对象中的多个属性批量取出,且依然保持响应式
let { name, weapon } = toRefs(role1.value);

const changeArea = () => {
  area.value = "枫原家";
}

const changeRole1Name = () => {
  name.value = "雷电将军";
}

const changeRole1Weapon = () => {
  weapon.value = "薙草之稻光";
}
</script>

<style scoped>
.root {
  background-color: skyblue;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}

.roles {
  background-color: rgb(211, 216, 218);
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}

h2 {
  width: 1000px;
}

button {
  margin: 0 5px;
}

div {
  margin: 10px;
}
</style>

标签:name,area,weapon,toRefs,toRef,let,Vue3
From: https://www.cnblogs.com/me-me/p/18244011

相关文章

  • uniapp vue3 实现自定义Switch效果
    <template><viewclass="container"@click="toggleSwitch"><label:class="isOn?'switch-checked':'switch-nochecked'"><viewclass="open">{{activ......
  • Vue3——ref和reactive的比较
    定义数据ref用来定义基础类型数据和对象类型数据reactive只能定义对象类型数据使用方式ref定义的响应式变量必须使用.valuereactive定义的响应式变量不能使用.value,直接使用响应式对象,但是重新分配一个新对象,会失去响应式,解决方式使用Object.assign(oldObject,newObjec......
  • Vue3——ref定义响应式数据
    ref作用ref:定义响应式变量,既可定义基础类型数据,也可以定义对象类型。语法格式:lettemp=ref(初始值)返回值:temp是一个RefImpl的实例对象,简称ref对象,ref对象的value属性是响应式。注意点:JS/TS中使用变量temp操作数据时,需要temp.value,但是在模板中不需要temp.value,直接......
  • vue3 dom ref 实现,子组件ref实现,defineExpose暴露子组件作用域
    示例代码App.vue<template><header><imgalt="Vuelogo"class="logo"src="@/assets/logo.svg"width="125"height="125"/><divclass="wrapper"><HelloWorld......
  • 在Vue3中高级前端是这样给按钮添加loading效果的
    前言一个页面有多个按钮,每个按钮都要添加loading效果,高级前端是如何在Vue3控制按钮是否显示loading效果的呢?普通前端我们先来看看初级普通前端平常是怎么给按钮添加loading效果的:<scriptsetup>import{ref}from'vue'constasyncFn=()=>newPromise(resolve=>......
  • Vue3——setup语法糖
    setup概述setup是Vue3中新的配置项,值是一个函数,组件中所用到的数据、方法、计算属性、监视等等,均配置在setup中。setup函数返回的对象中的内容,可直接在模版中使用。setup中不能使用this关键字,this是undefined。setup会在beforeCreate()函数之前调用,领先所有的钩子函数执行的......
  • 基于jeecgboot-vue3的Flowable流程--抄送我的功能
    因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。1、抄送我的界面代码如下:<template><divclass="p-2"><!--查询区域--><divclass="jeecg-basic-table-form-container"><a-formref="formRef"@keyup.enter.nati......
  • electron + vue3 自定义窗口:移动,缩放,置顶
    electronmain.jsconst{BrowserWindow,ipcMain}=require('electron');constpath=require("path")constCustomWindow=require('./CustomWindow')constwin=newBrowserWindow({frame:false,transparent:true,......
  • 实现抖音视频滑动功能vue3+swiper
    首先,你需要安装和引入Swiper库。可以使用npm或者yarn进行安装。pnpminstallswiper然后在Vue组件中引入Swiper库和样式。//导入Swiper组件和SwiperSlide组件,用于创建轮播图import{Swiper,SwiperSlide}from'swiper/vue';//导入Swiper的CSS样式,确保轮播图......
  • vue3 高德安徽省边界 密钥必须添加否则会出现无法使用DistrictSearch的方法也不报错
    <template> <divclass="centermap"ref="mapContainer"></div></template><scriptsetuplang="ts">import{ref,onMounted}from'vue';importAMapLoaderfrom'@amap/amap-jsapi-l......