uni-app鸿蒙Next端uni.request的post的data中数组丢失

uni-app鸿蒙Next端uni.request的post的data中数组丢失

开发环境 版本号 项目创建方式
Mac HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:Sequola15.5

HBuilderX类型:Alpha

HBuilderX版本号:4.72

手机系统:HarmonyOS NEXT

手机系统版本号:HarmonyOS 5.0.1

手机厂商:华为

手机机型:Mate70Pro+

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

一、可以成功发送到后端的代码:

const arr = [{id:1},{id:2}]
uni.request({
url: 'https://www.example.com/request',
data: {
arr: arr
},
success: (res) => {
console.log(res.data);
}
});
后端可以正常接收到arr  

二、不可以成功发送到后端的代码:

this.arr = [{id:1},{id:2}]
uni.request({
url: 'https://www.example.com/request',
data: {
arr: this.arr
},
success: (res) => {
console.log(res.data);
}
});
后端接收到arr是空的

操作步骤:

this.arr = [{id:1},{id:2}]
uni.request({
url: 'https://www.example.com/request',
data: {
arr: this.arr
},
success: (res) => {
console.log(res.data);
}
});

预期结果:

后端可以接收到arr

实际结果:

后端不可以接收到arr

bug描述:

uni.requset的post的data中放数组是很常见的,并且在uniapp中使用多年,无论是ios、安卓、web,还是鸿蒙Next的上一个版本中也没有出问题。但这一次打包鸿蒙Next发现问题。只要data中的数组是来自于this,就无法正常被发送,似乎丢失了。

目前我想要修复这个问题,需要在data中将所有数组都进行一次拷贝,无论是来自this还是vuex,以前是没有这么麻烦的。


更多关于uni-app鸿蒙Next端uni.request的post的data中数组丢失的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

对的有这个问题,是鸿蒙 jsvm 的数组有兼容性问题,预计下个版本更新修复

更多关于uni-app鸿蒙Next端uni.request的post的data中数组丢失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


修复了嘛。。。。。。现在还会出现哎,H5、app、小程序都正常,鸿蒙不行

回复 8***@qq.com: 修复了,是否harmony-configs下有oh-package?或者更新到4.75 之后删除unpackage重新运行

这是一个在uni-app鸿蒙Next端已知的数据绑定问题。当数组作为组件实例属性(this.arr)传递给uni.request的data时,在序列化过程中可能丢失数据内容。

问题分析:

  1. 直接使用局部变量arr能正常发送,说明基础数组传输功能正常
  2. 使用this.arr时数组变为空,表明问题出现在响应式数据与鸿蒙Next端序列化的兼容性上
  3. 这可能是鸿蒙Next新版在数据序列化时对响应式数组的处理存在差异

临时解决方案:

// 在data中对数组进行浅拷贝
uni.request({
  url: 'https://www.example.com/request',
  data: {
    arr: [...this.arr] // 或 this.arr.slice()
  },
  success: (res) => {
    console.log(res.data);
  }
});
回到顶部