【无标题】

Vue.js 中 refreactive 的区别及用法

ref
  • 目的:创建一个对值的响应式引用。

  • 用法 :通过 .value 属性来访问和修改值。

  • 示例

javascript 复制代码
import { ref } from 'vue';

const count = ref(0);

count.value++;  // 增加值
console.log(count.value);  // 访问值
  • 直接赋值数组ref 创建的是一个包含 .value 属性的对象,这个 .value 属性持有实际的数据。无论如何改变这个 .value 的内容,Vue 都能检测到变化并进行更新。
javascript 复制代码
import { ref } from 'vue';

const city1List = ref([]);

onMounted(() => {
  getCityByPid(0).then(res => {
    city1List.value = res.data.data;  // 直接赋值新数组
    console.log(city1List.value);  // 访问数组内容
  });
});
reactive
  • 目的:创建一个深度响应的对象或数组。

  • 用法:直接修改响应对象或数组的属性。

  • 示例

    javascript 复制代码
    import { reactive } from 'vue'; const state = reactive({ count: 0 }); 
    state.count++; // 增加 
    count console.log(state.count); // 访问 count
  • 不能直接赋值数组reactive 创建的是一个深度响应的对象或数组,Vue 只跟踪创建时的对象引用。如果直接重新赋值一个新的对象或数组,Vue 将无法跟踪新的引用,因为新的引用不会被自动转换为响应式对象。

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

关键区别和最佳实践

  1. ref

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

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

实际解决方案

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

javascript 复制代码
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 适用于需要深度响应的对象或数组,在修改其内部属性或元素时能保持响应性。
相关推荐
冴羽35 分钟前
今日苹果 App Store 前端源码泄露,赶紧 fork 一份看看
前端·javascript·typescript
蒜香拿铁37 分钟前
Angular【router路由】
前端·javascript·angular.js
时间的情敌44 分钟前
Vite 大型项目优化方案
vue.js
brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
西洼工作室1 小时前
高效管理搜索历史:Vue持久化实践
前端·javascript·vue.js
广州华水科技1 小时前
北斗形变监测传感器在水库安全中的应用及技术优势分析
前端
樱花开了几轉1 小时前
element ui下拉框踩坑
开发语言·javascript·ui
开发者如是说2 小时前
Compose 开发桌面程序的一些问题
前端·架构
故事不长丨2 小时前
【Java SpringBoot+Vue 实现视频文件上传与存储】
java·javascript·spring boot·vscode·后端·vue·intellij-idea
旺代2 小时前
Token 存储与安全防护
前端