vue3使用reactive包裹数组如何正确赋值

需求:将接口请求到的列表数据赋值给响应数据arr

const arr = reactive([]);

const load = () => {
  const res = [2, 3, 4, 5]; //假设请求接口返回的数据
  // 方法1 失败,直接赋值丢失了响应性
  // arr = res;
  // 方法2 这样也是失败
  // arr.concat(res);
  // 方法3 可以,但是很麻烦
  res.forEach(e => {
    arr.push(e);
  });
};

vue3使用proxy,对于对象和数组都不能直接整个赋值。
使用方法1能理解,直接赋值给用reactive包裹的对象也不能这么做。

方法2为什么不行?
只有push或者根据索引遍历赋值才可以保留reactive数组的响应性?
如何方便的将整个数组拼接到响应式数据上?

提供几种办法

const state = reactive({
  arr: []
});

state.arr = [1, 2, 3]
const state = ref([])

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

arr.push(...[1, 2, 3])

这几种办法都可以触发响应性,推荐第一种

  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Vue3中,可以使用reactive来定义数组并实现响应式监听。具体的用法如下: ```javascript import { reactive } from 'vue'; let arr = reactive([]); ``` 若要改变数组的值,可以通过赋值一个新数组给arr来实现。例如: ```javascript function change(){ let newArr = [1,2,3]; arr = newArr; } ``` 然而,上述代码并不能实现预期的效果,因为在Vue3中,reactive的对象赋值会使其失去响应式能力。为了解决这个问题,可以采用以下方法之一: 1. 使用ref定义数组并通过.value来获取和修改数组的值。 ```javascript import { ref } from 'vue'; let arr = ref([]); function change(){ let newArr = [1,2,3]; arr.value = newArr; } ``` 2. 使用push方法来修改数组,此时不需要使用ref或reactive。 ```javascript let arr = reactive([]); function change(){ let newArr = [1,2,3]; arr.push(...newArr); } ``` 3. 在数组外层嵌套一个对象,然后通过修改对象的属性来实现数组的改变。 ```javascript let arr = reactive({list:[]}); function change(){ let newArr = [1,2,3]; arr.list = newArr; } ``` 以上就是在Vue3中使用reactive定义数组以及解决赋值问题的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue3中的ref 和 reactive 定义数组](https://blog.csdn.net/qq_58247332/article/details/127259618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Vue3 初探 ref、reactive 、及改变数组的值](https://blog.csdn.net/u014212540/article/details/124280339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值