首页 > 其他分享 >学习vue3遇到的问题

学习vue3遇到的问题

时间:2023-03-02 11:00:20浏览次数:52  
标签:const 遇到 age toRef 学习 reactive userinfo vue3 ref

1.toRef

toRef是用来给抽离响应式对象(被reactive包裹的对象)中的某一个属性的,并且把这个属性包裹成ref对象,使其和原对象产生链接。

或许有人就回有人有疑问了?这个toRef存在有什么意义呢?因为我们知道reactive包裹的东西其实已经有了响应式了,再用toRef什么意义呢?

<script setup lang="ts">
import { ref,reactive,toRef } from 'vue';

const userinfo = reactive({
  name:'张三',
  age:18
})
//定义一个age2赋值userinfo.age
const age2 = userinfo.age
// const state = toRef(userinfo,'age')
const toChange = () =>{
  userinfo.age++
  console.log("userinfo",userinfo);
  
}
</script>

<template>
  <div class="content">
    <button @click="toChange">按钮</button>{{ age2 }}
  </div>
</template>

<style scoped>
</style>
定义一个age2赋值userinfo.age,修改对象userinfo里的age值,数据改变DOM不改变

 

 

如图:我们如果要单独把对象中的某个值拿出来,如果直接赋值,会断掉响应式(age2)。就算后面puserinfo.age的名字改了,但是因为断掉了响应式,输出的还是原有的名字。
而使用toRef会保持对其源 property 的响应式连接。
并且响应是互相的,数据源数据也会被更改
数据会实时更新到HTML视图上
用toRef这样写
<script setup lang="ts">
import { ref,reactive,toRef } from 'vue';

const userinfo = reactive({
  name:'张三',
  age:18
})
const age2 = userinfo.age
//toRef
const state = toRef(userinfo,'age')
const toChange = () =>{
  //.value调用
  state.value++
  console.log("userinfo",userinfo);
  
}
</script>

<template>
  <div class="content">
    <button @click="toChange">按钮</button>{{ state }}
  </div>
</template>

<style scoped>
</style>

数据更新DOM也同步更新

 

 

 


有人又会问了,那如果说toRef只是把这个响应式对象的属性包裹成ref对象,那我直接用ref这个对象不就可以了吗?何必要用toRef呢。
答:ref是不会去更改原数据的,ref本质是拷贝原数据,而toRef会修改原数据!!
使用ref DOM更新,数据没更新
<script setup lang="ts">
import { ref,reactive,toRef } from 'vue';

const userinfo = reactive({
  name:'张三',
  age:18
})
const age2 = userinfo.age
//ref
const state = ref(userinfo.age)
const toChange = () =>{
  //.value调用
  state.value++
  console.log("userinfo",userinfo);
  
}
</script>

<template>
  <div class="content">
    <button @click="toChange">按钮</button>{{ state }}
  </div>
</template>

<style scoped>
</style>

 

标签:const,遇到,age,toRef,学习,reactive,userinfo,vue3,ref
From: https://www.cnblogs.com/bisiyuan/p/17171056.html

相关文章

  • Mybatis-Plus学习
    mybatis-plus学习系统环境jdk8+mysql5.7+springBoot+mybatis最新版本+系统编码UTF-8文件配置application.properties#应用名称spring.application.name=mybatisplu......
  • Markdown学习
    Markdown学习标题一级标题:#+空格+标题名N级标题:N个#+空格+标题名字体字体两边+*=斜体这是斜体字体两边+**=粗体这是粗体字体两边+~~=删除......
  • ABP微服务系列学习-使用Tye启动微服务
    Tye是微软开源的一款开发人员工具,能够用于简化微服务以及分布式应用程序的开发、测试以及部署过程。Tye的首要目标是简化微服务的开发,具体方式包括仅用一行命令执行多项......
  • vue3 门户网站搭建6-wangeditor
    门户网站的新闻、公告等文章,内容可配置,故引入wagneditor 1、安装:npmi wangeditor 2、方便调用,抽成组件:<template><divref='editor'></div></template><......
  • 机器学习python环境搭建
    目的:跑通下面代码相关代码fromtorchimportnnimporttorchimportjiebaimportnumpyasnpraw_text="""越努力就越幸运"""words=list(jieba.cut(raw_text))......
  • 汇编语言学习_5_包含外部文件
    第五节包含外部文件翻译自:https://asmtutor.com/外部包含文件允许我们从我们的程序中移动代码并将其放入单独的文件中。这种技术对于编写干净、易于维护的程序很有用。......
  • 学习前端遇到的问题以及解决办法
      图中的abc和123相隔很远,按道理来说应该是上下紧贴着的两层的,原因是因为上面的像素高超了一点点导致它下移动了,我们可以用overflow:hidden;放在上面那个盒子里面解决......
  • 《渗透测试》学习随笔 day5
    1常规化原理:源码数据都在同服务器影响:无,常规安全测试手法 2站库分离:原理:源码数据库不在同服务器存储:其他服务器上数据库&云数据库产品影响:数据被单独存放,能连接才......
  • 3月1日Android开学学习
    Android开发的简单控件1.文本显示2.视图基础3.常用布局4.按钮触控5.图像显示文本显示(1)设置文本内容1.在XML文件中通过属性Android:text设置文本Android:text="......
  • 网络安全丨二进制小白应该如何学习入门?
    作者:黑蛋昨天说了一下为神马二进制学习周期长,今儿就来聊一聊Windows二进制小白应该如何学习入门。学逆向,先要学正向,这个是没办法避免的事情,不要想着一开始就要搞破解,搞病......