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

对vue3中reactive、toref、torefs、ref的详细理解

reactive:将平常的一个对象转换成响应式对象。所谓的响应式对象就是当页面点击修改此对象时,页面无需刷新而在页面上的其他地方有用到这个对象的地方会自动同步修改过来例如:

<template>
  <div class="container">
    <div>{{obj.name}}</div>
    <div>{{obj.age}}</div>
    <button @click="updateName">修改数据</button>
  </div>
</template>
<script setup>
import { reactive, toRef, toRefs } from 'vue'
  // 1. 响应式数据对象
  const obj = reactive({
    name: 'ls',
    age: 10
  })

  const updateName = () => {
    obj.name = "lisi"
  }

</script>
<style scoped lang="less"></style>

当点击修改时名字会变成lisi,如果不加reactive()则不是响应式对象,即修改的时候页面数据不会改变

toref:将响应式对象中的一个属性变成响应式属性,相当于单列出来一个数据但是这个数据的值还和原响应式对象的值关联在一起。修改其值需要额外添加一个.value即对其.value进行修改才有效。例如:

<template>
  <div class="container">
    <div>{{name}}</div>
    <div>{{obj.name}}</div>
    <div>{{obj.age}}</div>
    <button @click="updateName">修改数据</button>
  </div>
</template>
<script setup>
import { reactive, toRef, toRefs } from 'vue'
  // 1. 响应式数据对象
  const obj = reactive({
    name: 'ls',
    age: 10
  })

  const name = toRef(obj, "name")
  const updateName = () => {
    // obj.name = "lisi"
    name.value = "lisi"
  }

</script>
<style scoped lang="less"></style>

torefs:是将响应式对象中的所有的属性变成单独的响应式数据而且也和院对象中的值相关联着。例如:

<template>
  <div class="container">
    <div>{{name}}</div>
    <div>{{age}}</div>
    <div>{{obj.name}}</div>
    <div>{{obj.age}}</div>
    <button @click="updateName">修改数据</button>
  </div>
</template>
<script setup>
import { reactive, toRef, toRefs } from 'vue'
  // 1. 响应式数据对象
  const obj = reactive({
    name: 'ls',
    age: 10
  })

  const {name, age} = toRefs(obj)
  const updateName = () => {
    // obj.name = "lisi"
    age.value = 200
    name.value = "lisi"
  }

</script>
<style scoped lang="less"></style>

ref主要是用来定义单独的一个数据(非对象)为响应式数据。例如:

<template>
  <div class="container">
    <div>{{name}}</div>
    <div>{{age}}</div>
    <button @click="updateName">修改数据</button>
  </div>
</template>
<script setup>
import { reactive, toRef, toRefs, ref } from 'vue'
  // 1. 响应式数据对象
  // const obj = reactive({
  //   name: 'ls',
  //   age: 10
  // })
  //
  // const {name, age} = toRefs(obj)
  let name = ref("jjw")
  let age = ref(0)
  const updateName = () => {
    // obj.name = "lisi"
    age.value = 200
    name.value = "lisi"
  }

</script>

另外ref还可以用在标签上边(另议)


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

相关文章:

  • 我在字节当主管:百次面试结果,总结一个刷掉99%求职者的问题!
  • 【Linux】软件性能分析工具:perf
  • 震撼,支持多模态模型的ChatGPT 4.0发布了
  • exe反编译为.py文件
  • 可吸附分离金属离子的147597-66-8,p-SCN-Bn-NOTA信息概述
  • 正则表达式高阶技巧之匹配模式(使用python实现)
  • 排序算法 - 冒泡排序
  • 「Python 基础」Web 应用编程
  • DAP-seq文章合集-蓝景科信
  • 【计算机组成原理 - 第一章】计算机系统概论(完结)
  • 理解 zk-SNARKs 和 zk-STARKs 的区别
  • Vue3做出B站【bilibili】 Vue3+TypeScript+ant-design-vue【快速入门一篇文章精通系列(一)前端项目案例】
  • 20年程序员生涯,读了200多本技术书,挑了几本精华好书分享给大家
  • 【代码随想录训练营】【Day44】第九章|动态规划|完全背包理论基础|518.零钱兑换 II|377.组合总和 Ⅳ
  • 操作技巧 | 在Revit中借用CAD填充图案的方法
  • Linux操作系统基础的常用命令
  • 【数论】最大公约数、约数的个数与约数之和定理
  • python自动化办公(二)
  • JAVA进阶 —— Stream流
  • java八股文--java基础