React Native中Async Storage存储对象时丢失内部函数问题咨询
问题根因与使用注意事项
根因分析
- AsyncStorage仅支持字符串类型的键值对存储,所有非字符串类型的值存入时必须转为字符串格式。你提供的代码直接传入对象给
setItem,要么会被隐式调用toString()转为无实际业务意义的"[object Object]",要么你实际使用时隐式/显式做了JSON序列化操作。 - JSON序列化存在固有规则:序列化过程中会自动忽略对象中的函数、undefined、Symbol类型的属性,也无法处理循环引用的对象。你的
bar属性是函数类型,在序列化阶段就已经被剔除,存储到AsyncStorage中的内容本身就不包含该函数信息,读取后自然无法找回。
使用注意事项
- 存入AsyncStorage的非字符串值必须显式调用
JSON.stringify()做序列化,读取时对应调用JSON.parse()反序列化,禁止依赖隐式类型转换,避免出现内容异常或报错。 - 不要尝试存储包含函数、undefined、Symbol、循环引用的对象到AsyncStorage,这类内容无法被JSON正常序列化。如果需要对象保留方法,可以在读取到反序列化后的普通对象后,手动挂载对应方法或者绑定类原型。
- 不要留空catch块,你当前的错误处理逻辑为空,存储过程中出现的类型错误、存储空间不足等问题都会被吞掉,无法及时感知异常,建议添加错误日志打印逻辑方便排查。
- 复杂业务对象存储前建议做属性过滤,仅保留需要持久化的普通数据属性,减少不必要的存储体积也能避免非预期的属性丢失。
内容的提问来源于stack exchange,提问作者Rahul Rajput
相关产品推荐
相关产品推荐

