vue3中ref的作用及ref和reactive之间的转化

news2024/11/29 12:52:33

ref的作用:

(1)第一个作用:和vue一样:

  • 绑在dom节点上拿到的是dom节点;
  • 绑在组件上拿到的是组件对象;

定义方式:

<template>
    <div>
        <input type="text" ref="mytextref">
        <button @click="handleClick()">change</button>
    </div>
</template>

<script>
import { ref } from '@vue/reactivity'
export default {
    setup(){
        const handleClick=()=>{
            console.log(mytextref.value)//必须“.value”才能拿到input标签
        }

        // 创建ref对象
        const mytextref =ref()
        return {
            handleClick,
            mytextref
        }
    }
}
</script>

重点强调:

<input type="text" ref="mytextref">
import { ref } from '@vue/reactivity' //导入ref
// 创建ref对象
const mytextref =ref()
//返回mytextref
return {
    mytextref
        }
console.log(mytextref.value)//必须“.value”才能拿到input标签

结果:一点击button按钮,就拿到了input节点:

(2) ref状态用法

<template>
    <div>
        <!-- 这里其实是{{myname.value}},不过直接写myname,它也给你当成myname.value -->
        {{myname}}
        <button @click="handleClick()">change</button>
    </div>
</template>
<script>
import { ref } from '@vue/reactivity'
export default {
    setup(){
        const myname = ref("yiyi")//拦截的是ref对象里的value属性
        const handleClick=()=>{
            console.log(myname) //=>ref对象
            console.log(myname.value)//=>yiyi
            myname.value = 'linlin'
        }
        return{
            myname,
            handleClick
        }
    }
}
</script>

结果:点击按钮myname.value的值被改变

重点代码:

const myname = ref("yiyi")//拦截的是ref对象里的value属性
const handleClick=()=>{
      console.log(myname) //=>ref对象
      console.log(myname.value)//=>yiyi
      myname.value = 'linlin'
}

ref状态用法和reactive定义状态的区别:

相比较reactive定义状态,使用的时候需要obj.myname,ref状态用法就很好,把myname定义成ref对象,直接用myname就可以了,或者是myname.value;

{{obj.myname}}

const obj=reactive({
            myname:"yiyi",
            myage:100
        })

  • 有区别的原理是因为:

ref能直接拦截到字符串,拦截到字符串的原理其实是拦截的是ref对象里的value属性;

const myname = ref("yiyi")//拦截的是ref对象里的value属性

但是 reactive 就不能拦截到字符串,只能拦截到对象和数组:

const obj=reactive({})//拦截对象,可行
const obj2=reactive([])//拦截数组,可行
const obj3=reactive("yiyi")//拦截字符串,不可行

所以ref状态用法在dom节点上,比reactive好用一写,所以常拿来定义状态时使用; 

ref和reactive之间的转化:

  • ref在dom上比reactive好用一点,但是在函数里的使用reactive又比ref要好用,所以各有各的优点;
  • 不过ref和reactive之间可以转化,这样就可以在dom中使用ref,在函数里面使用reactive,这样就可以使得各自的优势最大化;
  • 用toRefs(obj)进行转换:
<template>
    <div>
        //使用ref方式
        {{myname}}--{{myage}}
    </div>
</template>

<script>
//引入toRefs
import { reactive,toRefs } from '@vue/reactivity'
export default {
    setup(){
        //使用reactive方式
        const obj=reactive({
            myname:"yiyi",
            myage:100
        })
        return {
            //ref和reactive进行转换
            ...toRefs(obj),
        }
    }
}
</script>

toRefs(obj)是把一个reactive里面的每个属性转换成了ref对象,效果: 

console.log(toRefs(obj))

return里要对toRefs(obj)对象展开,因为return返回的也是一个对象; 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java运行数据区域分布

Java在运行程序过程中&#xff0c;会将自己的内存划分为若干个不同的数据数据区域&#xff0c;这些若干个区域&#xff0c;每个区域都有自己的用途&#xff0c;具体看下图 java是面向对象的语言&#xff0c;那么虚拟机中的数据&#xff08;对象&#xff09;是怎么被创建出来的呢…

加密 笔记

文章目录简单异或加密对称加密DES加密AES加密1.简单的加密解密逻辑2.填充方式**noPadding**3.加密模式1、**ECB模式&#xff08;默认&#xff09;**2、**CBC模式**3、CFB模式4、OFB模式5、CTR模式代码案例ECB加密和CBC加密测试非对称加密RSA加密AES和RSA混合加密哈希散列算法什…

[附源码]Python计算机毕业设计动物保护资讯推荐网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

RabbitMQ[3]-RabbitMQ如何保证消息的可靠性投递与消费?

上篇文章&#xff1a;RabbitMQ的核心概念有哪些&#xff1f;它们的职责是什么&#xff1f;中我们详细介绍了RabbitMQ的工作模式&#xff0c;根据它的工作模式&#xff0c;一条消息从生产者发出&#xff0c;到消费者消费&#xff0c;需要经历以下4个步骤&#xff1a; 生产者将消…

Java笔记——String类各种方法的使用总结(附带实例)

String类的获取方法 String类实现获取功能的方法有 int length() —— 获取字符串长度 char charAt(int index) —— 获取指定索引处的字符值 int indexOf(int ch) —— 获取指定字符第一次出现的索引位置 int indexOf(String str) —— 获取指定字符串第一次出现的索引位…

ArrayDeque源码解析

ArrayDeque源码解析 问题 &#xff08;1&#xff09;什么是双端队列&#xff1f; &#xff08;2&#xff09;ArrayDeque 是怎么实现双端队列的&#xff1f; &#xff08;3&#xff09;ArrayDeque 是线程安全的吗&#xff1f; &#xff08;4&#xff09;ArrayDeque 是有界的…

【正点原子FPGA连载】 第三十五章双目OV5640摄像头HDMI显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十五章双目O…

基于jsp+mysql+ssm二手书交易管理系统-计算机毕业设计

项目介绍 这样一个二手书交易网站为用户提供了一个可以在网上买卖图书的平台&#xff0c;用户可以通过二手书交易管理系统进行注册或登录操作&#xff0c;登录成功后可以查看自己已发布的售书信息或者求购信息。同时&#xff0c;用户可以浏览其他用户发布的售书信息和求购信息…

基于51单片机的多层电梯(1-16层)运行系统仿真设计_层数可改

基于51单片机的多层电梯(1-16层)运行系统仿真设计_层数可改 仿真图proteus 8.9 程序编译器&#xff1a;keil 4/5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0027 视频演示 基于51单片机的多层电梯(1-16层)运行系统仿真设计演示视频主要功能&#xff1a; 结合实际情…

[附源码]Python计算机毕业设计SSM基于web的学生社团管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]Python计算机毕业设计SSM基于的二手房交易系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Ma…

基于Java+SQL Server2008开发的(WinForm)个人财物管理系统【100010036】

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展&#xff0c;计算机在管理方面应用的旁及&#xff0c;利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的&#xff0c;其次对个人财务管理…

2022年12月中国数据库排行榜:OceanBase立足创新登榜首,华为腾讯排名上升树雄心

不经一番寒彻骨&#xff0c;怎得梅花扑鼻香。 2022年12月的 墨天轮中国数据库流行度排行榜 火热出炉&#xff0c;本月共有249个数据库参与排名&#xff0c;相比上月新增3个数据库。本月排行榜前十用一句话可以概括为&#xff1a;榜单前十一片红&#xff0c;TODO 格局重洗牌&…

[附源码]Python计算机毕业设计SSM基于web技术的米其林轮胎管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SpringBoot中使用Spring-Retry重试框架 - 第454篇

悟纤&#xff1a;最近我看到自己之前的try/catch、while代码进行请求的重试&#xff0c;看着很不舒服。 师傅&#xff1a;确实了&#xff0c;为师以前也是写出过这样的一堆难看的代码。 悟纤&#xff1a;那师傅这个事情有解吗&#xff1f; ​师傅&#xff1a;徒儿&#xff0c;…

博客网页制作基础大二dw作业 web课程设计网页制作 个人网页设计与实现 我的个人博客网页开发

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

2022全年度平板电视十大热门品牌销量榜单

随着社会的发展&#xff0c;近年来&#xff0c;平板电视成为了彩电转型升级的新方向。随着我国传统彩电进入存量竞争阶段&#xff0c;平板电视已成为我国彩电行业结构调整和转型升级的主要方向。 根据鲸参谋数据统计&#xff0c;今年京东平台平板电视的年度累计销量达到1300多万…

< 在element-ui中: 使用el-tree + el-table组件,联动请求用户数据表格组件 (基础版,后续可能更新) >

文章目录&#x1f449; 前言&#x1f449; 一、效果演示&#x1f449; 二、原理&#x1f449; 三、实现代码往期内容 &#x1f4a8;&#x1f449; 前言 在 Vue elementUi 开发中&#xff0c;实现通过树状组织机构&#xff0c;点击查询用户信息联动效果&#xff01; 组件较为简…

MySQL数据库学习(6)

一、MySQL索引简介 索引是一种特殊的数据库结构&#xff0c;由数据表中的一列或多列组合而成&#xff0c;可以用来快速查询数据表中有某一特定值的记录。 通过索引&#xff0c;查询数据时不用读完记录的所有信息&#xff0c;而只是查询索引列。不然的话&#xff0c;数据库系统将…

强化学习_06_pytorch-doubleDQN实践(Pendulum-v1)

环境描述 环境是倒立摆&#xff08;Inverted Pendulum&#xff09;&#xff0c;该环境下有一个处于随机位置的倒立摆。环境的状态包括倒立摆角度的正弦值&#xff0c;余弦值&#xff0c;角速度&#xff1b;动作为对倒立摆施加的力矩(action Box(-2.0, 2.0, (1,), float32))。…