vue3给数组赋值失败

 const supplierIdcolumns=reactive([])
 const getsupplierId=()=>{
       supplierIdcolumns=[]
       let params={type:'1'};
       $http.post('/trans/supplier/querySupplier',qs.stringify(params)).then((res)=>{
       if(res.code=='00000'){
        supplierIdcolumns=res.data
       }else{
         Toast.fail(res.codeMsg)
       }
      })
    }

刚开始代码这样写的 发现绑不不上去值
然而 vue3是使用proxy 对于对象和数组不能直接整个赋值
所以外面包一层 解决问题:

 const state = reactive({
        supplierIdcolumns: [],
        });
        
 const getsupplierId=()=>{
       state.supplierIdcolumns=[]
       let params={type:'1'};
       $http.post('/trans/supplier/querySupplier',qs.stringify(params)).then((res)=>{
       if(res.code=='00000'){
        state.supplierIdcolumns=res.data
       }else{
         Toast.fail(res.codeMsg)
       }
      })
    }
### Vue 深层嵌套数组赋值解决方案 在 Vue 中,由于 JavaScript 的变更检测机制限制,直接修改深层嵌套对象或数组中的某些属性可能不会触发视图更新。为了确保这些更改能够被正确侦测并反映到视图中,推荐采用特定的方式来进行赋值。 #### 使用 `$set` 方法 对于深层嵌套结构而言,利用 `Vue.set` 或者实例的 `$set` 方法是一个有效的策略。这种方法不仅适用于新增加的键值对,也适合用来替换已有集合内的项目。这能保证新加入的数据成为响应式的部分[^2]: ```javascript // 假设存在如下数据模型 data() { return { items: [ { id: 1, details: [] }, // 更多项... ] } } // 更新items内某个元素details里的内容 methods: { updateDetails(itemId, newDetail) { const item = this.items.find(i => i.id === itemId); if (item && Array.isArray(item.details)) { // 正确做法:使用 $set 来添加新的 detail 到指定位置 this.$set(item.details, item.details.length, newDetail); /* 错误示范:直接push可能会导致响应失败 */ // item.details.push(newDetail); } } } ``` #### 替换整个数组 另一种常见的情况是对现有数组完全重置其内容,在这种情况下可以直接覆盖旧数组而不是逐个元素地改变它们。然而需要注意的是,简单的赋值操作(如 `= []`)有时并不能让 Vue 感知到变化;因此建议先复制一份原数组再做相应调整最后整体替换掉原始引用[^4]: ```javascript let updatedItems = [...this.items]; // 创建副本 updatedItems[index].details = newArray; // 修改副本中的具体内容 this.items = updatedItems; // 将修改后的版本指派回去 ``` #### 防止意外共享状态 当多个组件依赖同一份复杂的数据源时,应当小心处理以防止不必要的双向绑定效应。可以通过深拷贝技术创建独立的数据副本传递给子组件,从而避免不同组件间因共用相同内存地址而导致的状态同步问题[^5]。 ```javascript import _ from 'lodash'; provideIndependentCopy(data) { return _.cloneDeep(data); // lodash 库提供的深克隆功能 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值