vue3 ref 和 reactive 区别

这篇具有很好参考价值的文章主要介绍了vue3 ref 和 reactive 区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近学习cloud项目,前端使用到 vue3 + ts 等技术,在写需求过程中遇到响应式数据问题,经百度查找相关笔记,在此记录一下,在实战中成长吧。

问题

出现的问题定义一个默认数组并且 for 循环展示,后端返回数据并且赋值到数组中,但是展示的值并不会修改

<template>
	<el-card class="layout-home">
		<div style="display: flex; margin-top: 20px; height: 100px;">
        <div v-for="(item,index) in array" :key="index" :index="item.name" >
		  <transition name="el-fade-in-linear">
          <div class="transition-box">
		    <h3>{{item.name}}</h3>
			<p>{{item.num}}</p>
		  </div>
          </transition>
		</div>
    </div>
	</el-card>
</template>
<script lang="ts" setup>
import {initialization} from '@/api/sys/home'
let array = [
	{
        name: '卡密登录次数',
		num: 0
  },
	{
        name: '卡密使用个数',
		num: 0
  },
	{
        name: '短连接生成次数',
		num: 0
  },
	{
        name: '系统登录次数',
		num: 0
  }
]
initialization().then(res => {
	if (res != null && res.data) {
		const obj = res.data
		array[0].num = obj.secretKeyLoginNum
		array[1].num = obj.secretKeyNum
		array[2].num = obj.shortLinkNum
		array[3].num = obj.sysLoginNum
		console.log('1111',array);
	}
})
</script>

原因

原因在 js 中定义的 array 数组只是普通常量,并不是 响应式数组,它不会自动更新视图。

解决方案

方案使用 vue3 提供的 reactive ref 方法,来定义响应式数据。

import { reactive, ref } from 'vue'
<script lang="ts" setup>
import { reactive, ref } from 'vue'
import {initialization} from '@/api/sys/home'
const array = reactive([
	{
    name: '卡密登录次数',
		num: 0
  },
	{
    name: '卡密使用个数',
		num: 0
  },
	{
    name: '短连接生成次数',
		num: 0
  },
	{
    name: '系统登录次数',
		num: 0
  }
])
initialization().then(res => {
	if (res != null && res.data) {
		const obj = res.data
		array[0].num = obj.secretKeyLoginNum
		array[1].num = obj.secretKeyNum
		array[2].num = obj.shortLinkNum
		array[3].num = obj.sysLoginNum
		console.log('1111',array);
	}
})
</script>

ref

  • ref允许创建一个任意类型的响应式的ref对象,在使用时需要带上 .value
  • 在模板中使用 ref 对象时,若 ref 位于顶层,不需要使用value,它会自动解包,但 ref 对象是作为一个属性声明于对象之中,在模板中进行运算时依然要使用 .value

reactive

  • 通常使用 reactive() 来创建一个响应式的对象或数组,这样的对象或数组状态都是默认深层响应式
  • reactive() 只会对象类型有效,对基本数据类型无效,并且假如用一个新对象替换了原来的旧对象,那么原来的旧对象会失去响应性

ref 和 reactive 区别

ref 和 reactive 都是用来定义响应式数据的。文章来源地址https://www.toymoban.com/news/detail-407751.html

  • ref 多用来定义基本数据类型(也可以定义对象,内部会自动通过reactive转为代理对象),而 reactive 只能用来定义对象数组类型
  • ref 操作数据需要 .value ,reactive 操作数据不需要 .value

到了这里,关于vue3 ref 和 reactive 区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【vue3.0中ref与reactive的区别及使用】

    ref与reactive都是Vue3.0中新增的API,用于响应式数据的处理。 ref是一个函数,可以用于将一个普通的数据类型转换成响应式数据。ref返回一个包含value属性的对象,通过修改value属性的值,可以触发组件更新。 使用方式如下: reactive是一个函数,用于将一个普通的对象转换成响

    2024年02月11日
    浏览(38)
  • vue3中ref和reactive联系与区别以及如何选择

    1、ref既可定义基本数据类型,也可以定义引用数据类型,reactive只能定义应用数据类型 2、ref在js中取响应值需要使用 .value,而reactive则直接取用既可 3、ref定义的对象通过.value重新分配新对象时依旧保持数据响应式,而reactive重新分配新对象会失去响应式 4、使用ref定义引用数

    2024年01月25日
    浏览(42)
  • vue3中,ref()、reactive()、computed()、watch() 和 watchEffect()的区别

    ref()、reactive()、computed()、watch() 和 watchEffect() 是 Vue 3 中常用的响应式处理函数,它们的主要区别如下: ref():ref() 函数用于将一个普通的 JavaScript 值转化为响应式对象。它返回一个具有 value 属性的对象,我们可以通过访问 value 属性来获取或修改值。当我们对 ref() 返回的对象

    2024年02月22日
    浏览(53)
  • 【vue3】vue3的三种写法(附带provide/inject、toRefs说明、ref,reactive的区别)

    写法一(vue3的写法) toRefs定义: toRefs可以将对象(只能接收rective对象)中的属性变成响应式。 正常reactive对象数据也是响应式的,如果用toRefs解构出去会更加方便。 toRefs什么时候用? 数据量如果很多, 我们一般会用解构来简化代码, 那么在vue3 中如果使用对象的解构,

    2024年02月13日
    浏览(44)
  • vue3之reactive和ref学习篇

    change函数实现了一个简单的0-10的一个自增自减的循环,之所以记录是自己写的时候费了点时间,一直在想这个判断条件怎么优化,其实条件无法继续优化了,除非一个一个数字判断或者循环,加一个标志increasing就能解决的事想了半天

    2024年02月11日
    浏览(35)
  • 【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch

    所谓响应式就是界面和数据同步,能实现实时更新。 Vue 中用过三种响应式解决方案,分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 vue3中实现响应式数据的方法是使用ref和reactive。 reactive更推荐去定义复杂的数

    2024年02月03日
    浏览(43)
  • vue3 #ref #reactive

    一、ref 函数将简单类型的数据包装为响应式数据 import { ref } from \\\'vue\\\'  const count = ref(10) 一、reactive函数将复杂类型的数据包装为响应式数据 import { reactive} from \\\'vue\\\'  const obj= reactive({     name : \\\'zs\\\',     age : 18 })

    2024年02月22日
    浏览(48)
  • Vue3 ref与reactive

    在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使我们能够更轻松地构建出优雅而高效的Web应用程序。

    2024年01月24日
    浏览(58)
  • vue3使用ref和reactive

    目录 ​​​​​​​ vue3使用ref和reactive的方法 1.ref 2.reactive Vue 3 使用 ref 和 reactive 创建响应式对象的完整示例: 1.示例 2.示例说明 vue3使用ref和reactive的方法 Vue 3引入了两个新的API, ref 和 reactive ,用于创建响应式对象。这两个方法都位于 Vue.prototype 上,因此可以在组件实例

    2024年02月08日
    浏览(46)
  • vue3 自动引入 ref reactive...

    npm i unplugin-auto-import -D vite.config.js Q : typescript 报错:‘reactive’ is not defined. A : TS 未识别到 vue api,没有相应的模块声明文件, 在 vite 中配置并生成 auto-imports.d.ts ,并在 tsconfig.json 中引入 vite.config.js tsconfig.json Q: eslint 无法识别报错 error ‘reactive’ is not defined no-undef A: 未配置

    2024年01月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包