我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue中Ref与Reactive的区别是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue中Ref与Reactive的区别是什么

今天小编给大家分享一下Vue中Ref与Reactive的区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Ref与Reactive

Ref

Ref 用来创建基础类型的响应式数据,模板默认调用value显示数据。方法中修改需要修改value的值才能修改

<!-- 模板语法> <template>   <div>{{state}}</div></template> //js 脚本setup(){     let state = ref(10)      state.value = 11     return {state}}

Reactive

Reactive 用来创建引用类型的响应式数据,

<!-- 模板语法> <template>   <div>{{state.name}}</div></template> //js 脚本setup(){     let state = reactive({name:"aaa"}})      state.name = "zhangsan"     return {state}}

Ref与Reactive的区别

Ref的本质是通过Reactive创建的,Ref(10)=>Reactive({value:10});

Ref在模板调用可以直接省略value,在方法中改变变量的值需要修改value的值,才能修改成功。Reactive在模板必须写全不然显示整个数据。

Reactive的本质是将每一层的数都解析成proxy对象,Reactive 的响应式默认都是递归的,改变某一层的值都会递归的调用一遍,重新渲染dom。

shallowRef 与shallowReactive

Ref与Reactive创建的都是递归响应的,将每一层的json 数据解析成一个proxy对象,shallowRef 与shallowReactive创建的是非递归的响应对象,shallowReactive创建的数据第一层数据改变会重新渲染dom

 var state = shallowReactive({    a:"a",    gf:{       b:"b",       f:{          c:"c",          s:{d:"d"}       }    } }) state.a = "1" //改变第一层的数据会导致页面重新渲染 //state => Proxy {a:"a",gf:{...}}//如果不改变第一层 只改变其他的数据 页面不会重新渲染 例如 state.gf.b = 2

通过shallowRef创建的响应式对象,需要修改整个value才能重新渲染dom

var state = shallowRef({   a:"a",    gf:{       b:"b",       f:{          c:"c",          s:{d:"d"}       }    }})state.value.a = 1state.value = {    a:"1",    gf:{       b:"2",       f:{          c:"3",          s:{d:"d"}       }    }}

如果使用了shallowRef想要只更新某一层的数据可以使用triggerRef

var state = shallowRef({   a:"a",    gf:{       b:"b",       f:{          c:"c",          s:{d:"d"}       }    }})state.value.gf.f.s.d = 4triggerRef(state)

页面就会重新渲染

toRaw ---只修改数据不渲染页面

如果只想修改响应式的数据不想引起页面渲染可以使用toRaw这个方法

var obj = {name:"test"}var state = reactive(obj)var obj2 = toRaw(state)obj2.name = "zs"//并不会引起页面的渲染----//如果是用ref 创建的 就要获取value值var obj = {name:"test"}var state = ref(obj)var obj2 = toRaw(state.value)

markRaw --- 不追踪数据

如果不想要数据被追踪,变成响应式数据可以调用这个方法,就无法 追踪修改数据重新渲染页面

var obj = {name:"test"}obj = markRaw(obj)var state = reactive(obj)state.name = "zs"//无法修改数据 页面也不会修改

toRef --- 跟数据源关联 不修改UI

如果使用ref 创建的响应式变量,不会与源数据关联,如果想要与源数据关联但数据更改不更新UI,就要使用toRef创建

var obj = {name:"test"}var state = ref(obj.name)state.name = "zs" //此时obj的name 属性值并不会改变,UI会自动更新///var obj = {name:"test"}var state = toRef(obj,"name") //只能设置一个属性值state.name = "zs"//此时obj里面的name属性值会发生改变,但是UI 不会更新

toRefs ---设置多个toRef属性值

如果想要设置多个toRef属性值,可以使用toRefs

var obj = {name:"test",age:16}var state = toRefs(obj)state.name.value = "zs"//obj的name的属性值也会改变,但UI不会更新state.age.value = 18//obj的age的属性值也会改变,但UI不会更新

customRef ---自定义一个ref

通过customRef这个方法可以自定义一个响应式的ref方法

function myRef(value){       return customRef((track,trigger)=>{       return {          get(){             track()//追踪数据             return value               },          set(newVal){             value = newVal             trigger()//更新UI界面          }       }    })}setup(){   var age = myRef(18)   age.value = 20}

ref 捆绑页面的标签

vue2.0 可以通过this.refs拿到dom元素,vue3取消了这一操作,没有了refs拿到dom 元素,vue3取消了这一操作,没有了refs拿到dom元素,vue3取消了这一操作,没有了refs这个属性值,可以直接用ref()方法生成响应式变量与dom 元素捆绑

<template>   <div ref="box"></div></template>import {ref,onMounted} from "vue"<script>   setup(){      var box = ref(null)      onMounted(()=>{         console.log("onMounted",box.value)      })      console.log(box.value)      return {box}   }</script>

以上就是“Vue中Ref与Reactive的区别是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue中Ref与Reactive的区别是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue中Ref与Reactive的区别是什么

今天小编给大家分享一下Vue中Ref与Reactive的区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Ref与Re
2023-06-05

Vue3.0中Ref与Reactive的区别是什么

这篇文章主要介绍“Vue3.0中Ref与Reactive的区别是什么”,在日常操作中,相信很多人在Vue3.0中Ref与Reactive的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3.0中
2023-06-20

vue3 中ref和reactive的区别讲解

如果在template里使用的是ref类型的数据, 那么Vue会自动帮我们添加.value,如果在template里使用的是reactive类型的数据, 那么Vue不会自动帮我们添加.value,这篇文章主要介绍了vue3 中ref和reactive的区别,需要的朋友可以参考下
2022-12-19

Vue3中reactive与ref函数使用场景是什么

本文小编为大家详细介绍“Vue3中reactive与ref函数使用场景是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3中reactive与ref函数使用场景是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
2023-07-02

C#关键字in、out、ref的作用与区别是什么

这篇文章主要讲解了“C#关键字in、out、ref的作用与区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#关键字in、out、ref的作用与区别是什么”吧!简介:In:过程不会改
2023-06-30

php中==与===的区别是什么

这篇文章主要讲解了“php中==与===的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中==与===的区别是什么”吧!一、“==”操作符“==”操作符是PHP中的等于操作符
2023-07-05

vue中侦听器,缓存与computed的区别是什么

这篇文章主要讲解了“vue中侦听器,缓存与computed的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中侦听器,缓存与computed的区别是什么”吧!一、计算属性(co
2023-06-30

Vue前端路由中hash与history的区别是什么

今天小编给大家分享一下Vue前端路由中hash与history的区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。没了
2023-06-30

vue中@click和@click.native.prevent的区别是什么

这篇文章主要介绍“vue中@click和@click.native.prevent的区别是什么”,在日常操作中,相信很多人在vue中@click和@click.native.prevent的区别是什么问题上存在疑惑,小编查阅了各式资料,整理
2023-06-30

vue中mvvm和mvc的区别是什么

本篇内容介绍了“vue中mvvm和mvc的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mvvm和mvc的区别:1、mvvm各部分
2023-07-04

angular与vue有什么区别

angular与vue的区别:1、学习曲线,Angular是一个完整的框架,学习曲线相对较陡峭,Vue是更简单容易上手的框架;2、性能,Angular在处理大型应用程序时表现出色,Vue是响应式的机制来追踪数据的变化;3、生态系统,Angu
2023-08-10

vue中$route和$router的区别是什么

今天就跟大家聊聊有关vue中$route和$router的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。路由的设置和跳转中有两个对象$router和$route,是不是很像
2023-06-25

Python中==与is的区别是什么

这篇文章主要介绍“Python中==与is的区别是什么”,在日常操作中,相信很多人在Python中==与is的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中==与is的区别是什么”的疑
2023-06-16

Vue中的computed和watch的区别是什么

Vue中的computed和watch的区别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面带大家认识Vue中的computed 和 watch,介绍一下compu
2023-06-22

Java语言中&&与& ||与|的区别是什么

1、运算符两边的变量为boolean变量时 先列出代码:public class Test { public static void main(String[] args) { boolean a = false;
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录