在vue3中,定义响应式数据一般有两种方式:ref 和 reactive

一般来说,我们使用 ref 来定义基本数据类型,使用 reactive 来定义复杂数据类型

但是也可以使用 ref 来定义数组

1、ref 定义数组

import { ref } from 'vue'const arr = ref([])

两种情况:定义时就将数组初始化、定义时未初始化数组

初始化数组

import { ref,watch } from 'vue'const arr = ref([1,2,3])watch(arr.value, () => { //这个时候通过直接修改和利用数组的方法修改都可以监测到console.log('数组变化了')
})const pushArray = () => {emptyArray.value.splice(0, 0, 19)
}const changeArrayItem = () => {emptyArray.value[0] = 10
}

未初始化数组

import { ref,watch,onMounted } from 'vue'const arr = ref([])watch( //这个时候不能用.value且必须是深度监听,这种写法不仅可以监听数组本身的变化,也可以监听 数组元素的变化arr,() => {console.log('空数组变化了')},{deep: true}
)
const pushArray = () => {arr.value.splice(0, 0, { value: 12 })
}
const changeArrayItem = () => {arr.value[0] = { value: 32 }
}
onMounted(() => {arr.value = [{ value: 5 }, { value: 2 }, { value: 3 }, { value: 4 }]
})

2、reactive 定义数组

import { reactive } from 'vue';let arr = reactive([])function change(){let newArr = [1,2,3]arr = newArr
}

但是这样定义的会出现问题,arr = newArr 这一步使得 arr 失去了响应式的效果

解决方法:可以使用 ref 定义、使用 push 方法、数组外层嵌套一个对象

import { reactive,ref } from 'vue';let arr = reactive([])function change(){let newArr = [1,2,3]arr = newArr
}// 方法一:使用 ref
let arr = ref([])function change(){let newArr = [1,2,3]arr.value = newArr
}// 方法二:使用push 方法
let arr = reactive([])function change(){let newArr = [1,2,3]arr.push(...newArr)
}// 方法三:外层嵌套一个对象
let arr = reactive({list:[]})function change(){let newArr = [1,2,3]arr.list = newArr
}

vue3中的ref 和 reactive 定义数组相关推荐

  1. 在php中可以使用几种方法定义数组,PHP中数组定义的几种方法

    在php.html" target="_blank">php和其他编程语言中,需要常常使用数组创建,我们在前端开发中,js的数组创建可以由new array创建,下 ...

  2. Vue3.x 使用ref和reactive、toRef

    文章目录 一.使用ref 1. 引入 2. 定义ref变量 3. 赋值+.value 4. return 返回值 5. 将数据渲染到页面 二.使用reactive 和 toRef 1. 引入 2. 定 ...

  3. vue3中的ref,toRef,toRefs三个的作用

    1. ref的使用 ref 接受一个原始值,返回一个具有响应式的对象,对象有一个value属性,其值就是所传递的原始值. ref是做的一个拷贝关系,修改对象msg的值,不会影响对象obj,视图会发生变 ...

  4. Vue3中自定义ref

    文章目录 使用ref 使用customRef自定义ref 使用ref main.js import { createApp } from 'vue' import App from './App.vu ...

  5. 【Vue3】李南江老师讲解--个人笔记(二)ref 和 reactive详解

    [vue3笔记之 ref 和 reactive ] 实现响应式数据的方法 可以使用 ref,reactive定义响应式数据,本质上就是将传入的数据包装成一个Proxy对象. 使用 reactive 必 ...

  6. ref,reactive toRaw

    ref() 在vue3.0引入了composition API , setup函数是其核心函数 在setup函数中,可以使用ref函数,用于创建一个响应式数据,当数据发生改变时,Vue会自动更新UI ...

  7. ref、 reactive、toref、torefs的用法,区别

    ref. reactive.toref.torefs的用法,区别 ref 接受一个内部值并返回一个响应式且可变的 ref 对象.ref 对象仅有一个 .value property,指向该内部值 co ...

  8. ref和reactive区别

    ref是什么类型变量都可以定义,而reactive只能定义数组和对象 比如 ref定义字符串 //定义 const msg=ref("hellow world");// //事件调 ...

  9. vue3.x通过ref属性获取元素

    在vue2.x中,可以通过给元素添加ref='xxx'属性,然后在代码中通过this.$refs.xxx获取到对应的元素 然而在vue3中时没有$refs这个东西的,因此vue3中通过ref属性获取元 ...

最新文章

  1. 8月6日云栖精选夜读 | 阿里云CPFS在人工智能/深度学习领域的实践
  2. jquery实现上传图片及图片大小验证、图片预览效果代码
  3. 最新maven插件的安装
  4. custompage.width 不能小数吗_基金净值暴涨暴跌,背后的原因你清楚吗?
  5. poi中文api文档
  6. linux命令date的功能,Linux 命令date
  7. Java 蜡烛图_分支-15. 日K蜡烛图
  8. 根据后台返回地址实现图片展示_微信小程序 - 前端接入七牛云上传图片和视频...
  9. 梁刚:基于云原生技术建设“武汉健康云”云平台架构
  10. MATLAB与Hspice联合仿真
  11. 网易云信短信功能使用
  12. SpringBoot文件上传文件大小限制The field file exceeds its maximum permitted size of 1048576 bytes.
  13. python写音乐_你想过用代码来写音乐吗?我用业余时间开发的一个可以编程写音乐的python库(一)...
  14. linux centos 手册,zh/FAQ/CentOS4 - CentOS Wiki
  15. 高级搜索:搜索指定网址
  16. ModelAndView: materialized View is [null];和Action的onSubmit()方法不被执行
  17. 蓝牙mesh-拓扑结构
  18. 手写楚列斯基分解(楚列斯基因子分解) Matlab代码
  19. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用[]操作符和列名称访问dataframe指定数据列的数据(dataframe column data)
  20. 30天自制操作系统——第2天

热门文章

  1. 【魏先生搞定Python系列】一文搞定Cufflinks画图
  2. Perl中的单行注释和多行注释
  3. Python 包管理工具:pip 用法详解 + 常用pip指令
  4. 惠普笔记本重装系统后没有声音如何解决
  5. visio 2013下载安装
  6. 计算机信息安全及职业道德,CISP人员职业道德的准则
  7. Java调试--排查类工具
  8. 谷歌浏览器一键翻译功能用不了?教你怎么修复
  9. 「安全系列之CSRF」如何防范csrf攻击
  10. Flink学习:WaterMark