AsyncStorage mergeItem返回空值问题求助(React Native)
解决React Native中AsyncStorage.mergeItem返回null无法获取合并后数据的问题
嘿,兄弟,我来帮你捋清楚这个问题——其实这不是bug,是AsyncStorage.mergeItem()的API设计本身就是这样的!
你看,mergeItem()的Promise不会返回合并后的数据,它的返回值就是void,所以你在then里拿到的data自然是null,这完全是正常行为。你要获取合并后的完整数据,得在合并操作完成之后,主动去读取对应的存储项才行。
给你修改一下你的Redux动作函数,这样就能拿到你想要的合并后数据了:
export function addLineToCategory(key, item) { console.log("key", key) console.log("item", item) return (dispatch) => { AsyncStorage.mergeItem(CATEGORY_KEY, JSON.stringify({ [key]: item })) .then(() => { // 合并操作完成后,主动读取最新的完整数据 return AsyncStorage.getItem(CATEGORY_KEY); }) .then((mergedDataStr) => { // 把存储的字符串解析成JSON对象 const mergedData = JSON.parse(mergedDataStr); console.log("合并后的完整数据", mergedData); dispatch(addEntry(mergedData)); }) .catch((error) => { console.log('Adding line error : ', error) }); } }
再给你补充几个关键点:
- 一定要记得用
JSON.parse()解析getItem拿到的结果,因为AsyncStorage里存的都是字符串格式的数据。 - 整个流程要保证异步操作的顺序:先完成合并,再读取,最后分发动作,这样才不会拿到旧数据。
- 异常处理要覆盖到每一步,避免某个环节出错导致整个流程卡住。
这样修改之后,你就能正确获取到合并后的完整数据,再传给addEntry动作了~
内容的提问来源于stack exchange,提问作者Edper
相关产品推荐
相关产品推荐

