Vue.js 中 ref 和 reactive 的区别及用法解析

 更新时间:2024年09月19日 09:59:32   作者:陈小唬  
在Vue.js中,ref主要用于创建响应式的引用,通过.value属性来访问和修改值,特别适用于需要频繁更改整个值的场景,而reactive则用于创建深度响应的对象或数组,本文给大家介绍Vue.js 中 ref 和 reactive 的区别及用法,感兴趣的朋友跟随小编一起看看吧

Vue.js 中 refreactive 的区别及用法

ref

  • 目的:创建一个对值的响应式引用。
  • 用法:通过 .value 属性来访问和修改值。
  • 示例
import { ref } from 'vue';
const count = ref(0);
count.value++;  // 增加值
console.log(count.value);  // 访问值

直接赋值数组ref 创建的是一个包含 .value 属性的对象,这个 .value 属性持有实际的数据。无论如何改变这个 .value 的内容,Vue 都能检测到变化并进行更新。

import { ref } from 'vue';
const city1List = ref([]);
onMounted(() => {
  getCityByPid(0).then(res => {
    city1List.value = res.data.data;  // 直接赋值新数组
    console.log(city1List.value);  // 访问数组内容
  });
});

reactive

  • 目的:创建一个深度响应的对象或数组。
  • 用法:直接修改响应对象或数组的属性。
  • 示例
import { reactive } from 'vue'; const state = reactive({ count: 0 }); 
state.count++; // 增加 
count console.log(state.count); // 访问 count

不能直接赋值数组reactive 创建的是一个深度响应的对象或数组,Vue 只跟踪创建时的对象引用。如果直接重新赋值一个新的对象或数组,Vue 将无法跟踪新的引用,因为新的引用不会被自动转换为响应式对象。

import { reactive } from 'vue';
let city1List = reactive([]); 
onMounted(() => { 
getCityByPid(0).then(res => 
     { city1List.splice(0, city1List.length, ...res.data.data); // 使用数组方法修改内容 
     console.log(city1List); // 访问数组内容 
   }); 
);

关键区别和最佳实践

ref

创建一个响应式引用。使用 .value 来访问和修改值。可以直接通过 .value 重新赋值新的数组或对象。

reactive

  • 创建一个深度响应的对象或数组。
  • 直接修改对象或数组的属性或元素。
  • 不能直接重新赋值整个对象或数组,而需要修改其内部的属性或元素。

实际解决方案

使用 reactive 更新数组时,可以使用 splice 清除并替换元素,这样保持了对原始响应数组的引用,Vue 会继续跟踪其内容的变化。

import { reactive } from 'vue';
let city1List = reactive([]);
onMounted(() => {
  getCityByPid(0).then(res => {
    city1List.splice(0, city1List.length, ...res.data.data);  // 清除现有数组并添加新项目
    console.log(city1List);  // 访问数组内容
  });
});

总结

ref 适用于需要频繁更改整个值的场景,因为它可以直接赋值新的数组或对象。

reactive 适用于需要深度响应的对象或数组,在修改其内部属性或元素时能保持响应性。

到此这篇关于Vue.js 中 ref 和 reactive 的区别及用法的文章就介绍到这了,更多相关Vue.js ref 和 reactive用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue-router配合ElementUI实现导航的实例

    vue-router配合ElementUI实现导航的实例

    下面小编就为大家分享一篇vue-router配合ElementUI实现导航的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Vue拖拽排序组件Vue-Slicksort解读

    Vue拖拽排序组件Vue-Slicksort解读

    这篇文章主要介绍了Vue拖拽排序组件Vue-Slicksort,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Vue 报错TypeError: this.$set is not a function 的解决方法

    Vue 报错TypeError: this.$set is not a function 的解决方法

    这篇文章主要介绍了Vue 报错TypeError: this.$set is not a function 的解决方法,分享给大家,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • vue使用axios获取不到响应头Content-Disposition的问题及解决

    vue使用axios获取不到响应头Content-Disposition的问题及解决

    这篇文章主要介绍了vue使用axios获取不到响应头Content-Disposition的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • vue 项目接口管理的实现

    vue 项目接口管理的实现

    在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,本文就来介绍一下vue 项目接口管理,具有一定的参考价值,感兴趣的小伙伴可以一起来了解一下
    2019-01-01
  • 前端框架Vue父子组件数据双向绑定的实现

    前端框架Vue父子组件数据双向绑定的实现

    Vue项目中经常使用到组件之间的数值传递,实现的方法很多,但是原理上基本大同小异。这篇文章将给大家介绍Vue 父子组件数据单向绑定与Vue 父子组件数据双向绑定的对比从而认识双向绑定
    2021-09-09
  • Vue3封装自动滚动列表指令(含网页缩放滚动问题)

    Vue3封装自动滚动列表指令(含网页缩放滚动问题)

    本文主要介绍了Vue3封装自动滚动列表指令(含网页缩放滚动问题),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Vue.js 插件开发详解

    Vue.js 插件开发详解

    本文会通过一个简单的vue-toast插件,来帮助了解掌握插件的开发和使用。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • 详解Vue之计算属性

    详解Vue之计算属性

    这篇文章主要介绍了Vue之计算属性的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • vue单页应用的内存泄露定位和修复问题小结

    vue单页应用的内存泄露定位和修复问题小结

    系统进程不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)。这篇文章主要介绍了vue单页应用的内存泄露定位和修复,需要的朋友可以参考下
    2019-08-08

最新评论