首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React本机JSON.stringify无法序列化循环结构

React本机JSON.stringify无法序列化循环结构
EN

Stack Overflow用户
提问于 2017-02-16 14:25:58
回答 3查看 15.4K关注 0票数 13

我们正在构建一个RN应用程序(RN0.37),我们遇到了一个问题,当应用程序运行时,我们会得到一个"TypeError: JSON.stringify cannot serialize cyclic structures“。

API响应没有任何相关的更改,问题最近消失了,但在擦除/重建时重新出现(由不相关的问题触发)。

我怀疑有几个包被使用了:“react-native-router-flux”和“react-native-permissions”,但我在应用程序中找不到任何相关的东西。

目前我对"react-native-router-flux“的怀疑主要基于这篇文章:https://github.com/aksonov/react-native-router-flux/issues/363

我对"react-native-permissions“的怀疑主要是基于这样一个事实,即在这个项目中包含这个包的时间是可疑的,并且似乎与这个错误的浮出水面是一致的-尽管我不能绝对肯定地证明这一点。

我得到的唯一额外线索是,JSON.stringify错误似乎总是在一系列警告之前出现。它们都显示为“此合成事件出于性能原因而被重用。如果您看到这一点,则表示您正在访问已发布/无效的合成事件的属性。此属性设置为null。如果您必须保留原始合成事件,请使用event.persist()。有关详细信息,请参阅https://facebook.github.io/react/docs/events.html#event-pooling。”列表如下(总是以相同的顺序):nativeEvent、type、target、currentTarget、eventPhase、bubbles、cancelable、timeStamp、defaultPrevented、isTrusted和touchHistory。

以下是我的package.json:

代码语言:javascript
复制
"dependencies": {
  "blueimp-md5": "2.5.0",
  "moment": "2.16.0",
  "phone-formatter": "0.0.2",
  "react": "15.3.2",
  "react-native": "0.37.0",
  "react-native-asset-library-to-base64": "1.0.1",
  "react-native-aws3": "0.0.3",
  "react-native-button": "1.7.1",
  "react-native-cached-image": "1.2.2",
  "react-native-camera-kit": "4.0.1",
  "react-native-camera-roll-picker": "1.1.9",
  "react-native-contacts": "0.5.2",
  "react-native-fbsdk": "0.4.0",
  "react-native-fetch-blob": "0.10.0",
  "react-native-fs": "2.0.1-rc.2",
  "react-native-geocoder": "0.4.5",
  "react-native-image-crop-picker": "0.10.5",
  "react-native-image-resizer": "0.0.12",
  "react-native-nav": "1.1.4",
  "react-native-permissions": "0.2.5",
  "react-native-photo-view": "1.2.0",
  "react-native-router-flux": "3.37.0",
  "react-native-stripe": "1.2.1",
  "react-native-swipe-list-view": "0.3.1",
  "react-redux": "4.4.6",
  "redux": "3.6.0",
  "redux-storage": "4.1.1",
  "redux-storage-engine-reactnativeasyncstorage": "1.0.2",
  "underscore": "1.8.3"
}
EN

回答 3

Stack Overflow用户

发布于 2019-08-23 02:21:37

将此getCircularReplacer函数作为第二个参数传递到JSON.stringify()将修复此错误:

代码语言:javascript
复制
const getCircularReplacer = () => {
    const seen = new WeakSet();
    return (key, value) => {
    if (typeof value === "object" && value !== null) {
        if (seen.has(value)) {
            return;
        }
        seen.add(value);
    }
    return value;
    };
};

然后,您可以按如下方式使用它:

代码语言:javascript
复制
JSON.stringify(circularReference, getCircularReplacer());
// {"otherData":123}
票数 9
EN

Stack Overflow用户

发布于 2017-06-25 15:32:00

JSON.stringify不能处理引用其自身或部分自身的JSON对象。

Link

我为lazy创建了一个简单的库,它覆盖了JSON.stringify(),允许它处理循环引用,而不会产生异常。它可以防止您更改第三方库中有关此限制的任何内容。在代码的引导程序中安装它。

Link 2

票数 5
EN

Stack Overflow用户

发布于 2020-06-28 22:14:29

您正在为REACT NATIVE编写代码,但是您似乎在textInput上使用了onChange,而不是onChangeText,当您对文本输入的更新值感兴趣时,这是React Native的正确方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42266462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档