uni-app vue3 京东小程序 通过鸿蒙next打开有兼容bug
uni-app vue3 京东小程序 通过鸿蒙next打开有兼容bug
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win11 | HBuilderX |
操作步骤:
见附件
预期结果:
computed和watch正常使用
实际结果:
computed和watch失效
bug描述:
vue3 京东小程序 通过鸿蒙next打开 子组件computed和watch失效 具体见附件demo
鸿蒙上京东小程序不触发数据更新监听。调试后发现,如果配置了 pureDataPattern(纯数据字段),则 ComponentOptions.properties.propertyName.observer 就不会触发,而除鸿蒙外的平台会触发。
我在京东小程序的官网并没有找到相关的文档,而在微信小程序的文档上找到了 pureDataPattern 的说明,根据这里的说明,看起来鸿蒙上的表现是对的,微信小程序文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/pure-data.html
而如果改用 ComponentOptions.observers.propertyName 来做纯数据字段的变化监听,又在除鸿蒙平台之外的平台不触发变化了
估计是京东小程序的 Bug,各平台表现不一致。
临时解决方案
先在 HBuilderX 根目录/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-jd/dist/uni.mp.esm.js 搜索 pureDataPattern 注释掉重新编译运行
更多关于uni-app vue3 京东小程序 通过鸿蒙next打开有兼容bug的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,我现在按照您说的这个方式,修改了之后还是不行,这个想问下是否还有地方需求修改
当前是mac环境,对应的文件位置是/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-jd/dist/uni.mp.esm.js
demo
有官方人员回答一下吗
有官方人员回答一下吗
其他手机打开没问题?
是的 真机 模拟器都没问题 生产跑很久了 现在要兼容鸿蒙 就发现这些问题
当前我也是这个问题,我单纯的setTimeout模拟请求,更新了父组件的字段,打印只有父组件有,子组件里面除了第一次接收到props,后面连watch都没触发
回复 t***@163.com: 大佬,你是不是props也一直拿不到更新的值
回复 1***@qq.com: 嗯 就是我描述的子组件computed和watch失效
回复 t***@163.com: 我当前也是,我就传参,setTimeout去简单修改,子组件怎么都拿不到新的值
回复 t***@163.com: 好的,我试试,谢谢大佬
回复 t***@163.com: 您这边试了之后可以吗,我的好像还是不行,props还是报错
1111
在 uni-app 中使用 Vue3 开发京东小程序时,通过鸿蒙 Next 打开出现 computed 和 watch 失效的问题,通常与鸿蒙 Next 对 Vue3 响应式系统的兼容性有关。以下是可能的原因和解决方案:
-
响应式系统兼容性:鸿蒙 Next 可能未完全适配 Vue3 的 Proxy-based 响应式机制。尝试在
vue.config.js中配置compositionApi为false,回退到 Options API 测试是否正常。 -
生命周期差异:检查子组件的生命周期钩子是否在鸿蒙 Next 中正常触发。若
onMounted或onUpdated未执行,可能导致 computed 和 watch 未初始化。 -
编译配置:在
manifest.json中确认京东小程序的编译配置是否正确,特别是"mp-jd"相关设置。尝试更新 HBuilderX 到最新版本,确保编译链支持鸿蒙 Next。 -
依赖注入问题:若子组件依赖父组件的 provide/inject,需验证鸿蒙 Next 是否支持该特性。可改用 props 传递数据测试。
-
临时解决方案:将 computed 替换为 ref 结合 watchEffect,或使用 watch 的 immediate 选项强制初始化。例如:
const value = ref(0); watchEffect(() => { console.log(value.value); });


