dcloudio / uni-app

A cross-platform framework using Vue.js
https://uniapp.dcloud.io
Apache License 2.0
40.2k stars 3.64k forks source link

微信小程序使用循环引用的对象报错 #2980

Closed TStoneLee closed 1 year ago

TStoneLee commented 3 years ago

问题描述 开发vue组件时,需要在data函数函数中使用循环引用的对象,在小程序端会报错 复现步骤 [复现问题的步骤]

  1. 在data中添加循环引用的对象,进行双向绑定 预期结果 可以使用循环引用的对象 实际结果 报错信息: TypeError: Converting circular structure to JSON --> starting at object with constructor 'e' | property 'fields' -> object with constructor 'Array' | index 0 -> object with constructor 'e' --- property 'form' closes the circle at JSON.stringify () at bi (mp.runtime.esm.js:5620) at o.Ai [as patch] (mp.runtime.esm.js:5633) at o.e._update (mp.runtime.esm.js:3959) at o.n (mp.runtime.esm.js:5701) at Tn.get (mp.runtime.esm.js:4419) at Tn.run (mp.runtime.esm.js:4494) at wn (mp.runtime.esm.js:4250) at Array. (mp.runtime.esm.js:1984) at Ct (mp.runtime.esm.js:1912)(env: macOS,mp,1.05.2110110; lib: 2.20.1) Ai @ mp.runtime.esm.js:5635

系统信息:

补充信息 源码部分,此函数cloneWithData使用了JSON.parse(JSON.stringfy())来克隆数据,这部分可以修改吗?

zhetengbiji commented 3 years ago

底层不支持,只支持传输可 JSON 序列化的数据

everlose commented 2 years ago

同样遇到这个问题了,uniapp 编译去小程序环境就会出现。调试也是这

源码部分,此函数cloneWithData使用了JSON.parse(JSON.stringfy()) 爆出来的。

我最后解决了,我发现这个问题是因为我往 vue 这个实例上 挂载了一个对象,这个对象是继承自 eventEmitter3 的一个对象,所以无法被 JSON.parse(JSON.stringfy()) 转换。 建议把数据挂载去 uniapp 提供的 state 上。

TStoneLee commented 2 years ago

同样遇到这个问题了,uniapp 编译去小程序环境就会出现。调试也是这

源码部分,此函数cloneWithData使用了JSON.parse(JSON.stringfy()) 爆出来的。

我最后解决了,我发现这个问题是因为我往 vue 这个实例上 挂载了一个对象,这个对象是继承自 eventEmitter3 的一个对象,所以无法被 JSON.parse(JSON.stringfy()) 转换。 建议把数据挂载去 uniapp 提供的 state 上。

请问这个state指的是Vuex?我之前试过,也是会报错