首页 > 其他分享 >ref和reaction的区别(以及TS中ref,computed函数会自动推断定义其泛型(一般不用自己动手))

ref和reaction的区别(以及TS中ref,computed函数会自动推断定义其泛型(一般不用自己动手))

时间:2024-06-01 20:28:27浏览次数:31  
标签:reaction computed 对象 value toRef reactive ref 属性

其次就是了解ref,reactive的区别。

ref通过对象名.value来访问对象里的值,若对象里还有属性则访问其需要:对象名.value.属性名

reactive则通过:对象名.属性名,来直接访问属性值

其次,两者都是响应式对象。

但如果对直接对reactive对象进行赋值,那么其会丢失响应性。代码示例如下:

<script setup>  
import { reactive } from 'vue';  
  
const data = reactive({ name: "", age: "" });  
  
// 假设这是从某个接口获取的新数据  
const newData = { name: "New Name", age: 25 };  
  
// 直接赋值会导致响应性丢失  
data = newData;  
</script>

ref对象则不会。

针对reactive的toref(定义的ref对象的value与reaction中的属性相互绑定)、torefs(ref对象的value与reaction对象相互绑定)方法理解(一个绑定一个,一个绑定全部)

  • toRef:这个函数接收两个参数,第一个参数是一个 reactive 对象,第二个参数是该对象的一个属性名。toRef 返回一个新的 ref 对象,这个 ref 对象的 .value 属性与 reactive 对象中对应的属性保持同步。当你修改这个 ref 对象的 .value 时,reactive 对象中的对应属性也会更新,反之亦然。

  • toRefs:这个函数接收一个 reactive 对象作为参数,并返回一个对象,该对象的每个属性都是与 reactive 对象中对应属性保持同步的 ref 对象。这允许你在模板或其他组件中直接访问这些 ref 对象的 .value,而无需通过 reactive 对象来访问。

下面是一个使用 toRef 和 toRefs 的例子:

<script setup>

import { reactive, toRef, toRefs } from 'vue';



const state = reactive({

name: 'John',

age: 30

});



// 使用 toRef

const nameRef = toRef(state, 'name');



// 使用 toRefs

const { ageRef } = toRefs(state);



// 更新 nameRef 的值

function updateName() {

nameRef.value = 'Jane';

}



// 更新 ageRef 的值

function updateAge() {

ageRef.value = 31;

}

</script>



<template>

<div>

<p>Name: {{ nameRef.value }}</p> <!-- 使用 toRef -->

<p>Age: {{ ageRef.value }}</p> <!-- 使用 toRefs -->

<button @click="updateName">Update Name</button>

<button @click="updateAge">Update Age</button>

</div>

</template>


在这个例子中,nameRef 和 ageRef 都是 ref 对象,它们的 .value 属性与 reactive 对象 state 中的 name 和 age 属性保持同步。因此,你可以像直接使用 ref 那样对它们进行赋值,而不会丢失响应性。

标签:reaction,computed,对象,value,toRef,reactive,ref,属性
From: https://blog.csdn.net/Mi_Ni_BoX/article/details/139379080

相关文章

  • computed计算属性
    computed计算属性<template><divclass="person">姓:<inputtype="text"v-model="firstName"><br><br>名:<inputtype="text"v-model="lastName"><br><br......
  • 如何从unity Scene场景里,通过Prefab导出FBX
       有时候使用购买的工程,或者其他原因导致素材比较零碎。我们希望可以导出已经在unity场景里拼接好的预制体给到模型同学修改,这样可以减少重复工作量。   这里分享一个工作中使用到的unity插件,作为自己的工作记录和梳理。本人unity目前还在初级学习摸索阶段,希望可......
  • 如何隐藏 Firefox 窗口(Selenium WebDriver)?
    在Python中使用SeleniumWebDriver隐藏Firefox窗口通常涉及到配置FirefoxOptions来禁用其图形界面的显示。以下是一个详细的步骤和代码示例:1.首先,确保你已经安装了selenium库,以及geckodriver(适用于Firefox浏览器)。如果还没有安装,可以通过pip进行安装:```bashpipinstallsel......
  • golang reflect 常见示例
    reflect是golang中元编程的能力体现。需要注意的是,reflect尽量不用,有性能问题,也有避免滥用的考虑。packagemainimport( "log" "reflect")typeAstruct{ aint bstring cbool}//实验reflect的相关函数funcmain(){ typeValue() callFunc()}funcother......
  • 学习VUE3——模板引用ref
    在某些情况下,我们仍然需要直接访问底层DOM元素。要实现这一点,我们可以使用特殊的refattribute:<inputref="input">ref是一个特殊的attribute,和v-for章节中提到的key类似。它允许我们在一个特定的DOM元素或子组件实例被挂载后,获得对它的直接引用。这可能很有用,比......
  • 干货收藏!Calico的BGP RouteReflector策略实践
    本文分享自华为云社区《CalicoBGPRouteReflector策略实践》,作者:可以交个朋友。一背景容器网络组件Calico支持多种后端模式,有Overlay的IPIP、Vxlan模式,也有Underlay纯路由的BGP模式。相比于Overlay网络模型,Underlay网络具有更高的数据面转发性能。同时在纯路由模式下,也有两种......
  • 【Nginx】Referer配置
    server配置server{listen80;server_namelocalhost;add_headerX-Frame-OptionsSAMEORIGIN;add_headerReferer-Policyorigin;add_headerContent-Security-Policy"frame-ancestors'self'";add_headerX-Permi......
  • k8s:The connection to the server localhost:8080 was refused - did you specify the
    前言k8s集群node节点报错:Theconnectiontotheserverlocalhost:8080wasrefused-didyouspecifytherighthostorport?通过kubectlgetnodes查看集群的情况,出现了报错,内容如下:$kubectlgetpodE052902:28:59.776677415799memcache.go:265]couldn'tgetc......
  • DockerDesktop中启动jenkins容器时提示:Can not write to /var/jenkins_home/copy_ref
    场景Windows10(家庭版)中DockerDesktop(docker)的配置、安装、修改镜像源、使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139264096按照以上教程搭建之后想要运行jenkins容器,所以执行如下指令dockerrun-d--namejenkins-p18088:8080-v/jenkinshome:......
  • [email protected](12)ref 转发-forwardRef
    目录1,介绍2,类组件如何使用4,应用场景-高阶组件HOC1,介绍上篇文章中提到,ref只能对类组件使用,不能对函数组件使用。而ref转发可以对函数组件实现类似的功能。使用举例:importReact,{Component}from"react";functionCompA(props,ref){return(......