vue3创建数组以及使用watch的正确姿势

本文详细介绍了在 Vue3 中如何创建和使用数组,包括使用 ref 和 reactive。对于 watch 的正确使用,文章指出监听数组时需要注意的事项,并提供了不同方式下监听数组变化的示例。此外,还探讨了在修改响应式数组时保持数据响应性的最佳实践。
摘要由CSDN通过智能技术生成

vue3创建数组以及使用watch的正确姿势

定义数组
  • 使用ref函数
const arr = ref([1, 2, 3])

const changeArr = () => {
    arr.value = [1, 2]
}

return {
    arr,
    changeArr
}
  • reactive+push

也可通过其他可直接修改数组的方式来改变数组

const arr = reactive([1, 2, 3])

const changeArr = () => {
    arr.push(4)
}

return {
    arr,
    changeArr
}
  • reactive

推荐使用这种写法

const params = reactive({
    arr: [1, 2, 3]
})

const changeArr = () => {
    params.arr = [1, 2]
}

return {
    ...toRefs(params),
    changeArr
}
watch

当我们去监听一个非响应式对象时,控制台会出现warn:A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types,翻译过来就是:watch的东西必须是一个getter/effect方法,或者是一个响应式对象,或是一系列的数组。

  • 监听数组
// ref创建
const arr = ref([1, 2, 3])

const changeArr = () => {
    arr.value = [1, 2]
}

watch(arr, (newValue, oldValue)=>{
    console.log(newValue, oldValue)
})

return {
    arr,
    changeArr
}
// 通过这种reactive+push的方式创建的数组,只有在修改原数组的情况下才能达到响应式的效果
let arr = reactive([1, 2, 3])
const changeArr = () => {
    arr.push(4)
    // 直接修改原数组,此时arr就不是一个响应式的数据,所以监听不到任何变化
    // arr = []
}
watch(arr, (newValue, oldValue)=>{
    console.log(newValue, oldValue)
})
const params = reactive({
    arr: [1, 2, 3]count: 0
})

const changeArr = () => {
    params.arr = [1, 2]
}

// 通过直接监听params.arr是监听不到变化的,同理是因为params.arr不是一个响应式数据,而是一个数组类型
// watch(params.arr, (newValue, oldValue)=>{
//     console.log(newValue, oldValue)
// })

// 可以改写一个function,监听reactive里面的count同理,也需改写为function
watch(() => [...arr], (newValue, oldValue)=>{
    console.log(newValue, oldValue)
})

return {
    ...toRefs(params),
    changeArr
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值