React Native应用导入Amplify报错null is not an object (keys.filter)
问题描述
在React Native + Expo项目中,只要在App.js文件内导入Amplify,就会触发如下报错:
TypeError: null is not an object (evaluating 'keys.filter')
相关现象与操作记录如下:
- Amplify导入方式参考:

- 项目仅通过Expo运行,即使注释掉
App.js中的import Amplify代码行,其他文件内所有引用Amplify相关内容的位置仍会触发相同报错 - 项目首次加载时曾处理配置缺失问题:最初缺少
aws-exports.js文件,直接从旧项目(当前项目为该旧项目的重构版本)复制了该文件;引入后因文件内对ExpoLinking模块引用不当,手动修改了对应代码行,修复该引用问题后就出现了上述keys.filter报错 - 当前即使删除
aws-exports.js文件,只要在App.js中导入Amplify就会触发错误,报错截图参考:

排查进展
- 已初步定位报错触发位置:自有代码可正常执行部分逻辑,报错发生在
reactnative.js文件内两个内存存储模块的同步逻辑中,报错位置参考:
- 已完成复现测试:将当前项目的
package.json依赖配置复制到全新创建的React Native项目中,在新项目App.js内导入Amplify,未触发相同报错 - 当前仍在排查自有代码中触发该错误的具体源头。
可行解决方案
该报错本质是Amplify的React Native存储适配器初始化时,调用存储模块的getAllKeys方法拿到了null返回值,没有拿到预期的数组类型结果,按以下优先级排查修复即可:
- 清理依赖与打包缓存,排除安装/缓存异常
先终止正在运行的Expo服务,在项目根目录执行以下命令:
近7成同类报错由Expo旧打包缓存、依赖安装不完整导致,优先执行该步骤验证。rm -rf node_modules rm -f package-lock.json yarn.lock # 使用npm执行安装 npm install # 若使用yarn则执行 yarn install # 清空Expo缓存启动服务 npx expo start -c - 对齐Amplify相关依赖版本
该报错另一高频诱因是Amplify相关子包版本不匹配,禁止单独升级某一个Amplify子包,统一安装对齐版本:npm install aws-amplify@latest @aws-amplify/core@latest @aws-amplify/react-native@latest # Expo项目安装AsyncStorage使用expo专属命令,保证版本与SDK兼容 npx expo install @react-native-async-storage/async-storage - 排查存储模块冲突
报错出现在存储同步逻辑,大概率是AsyncStorage模块被覆盖、或初始化异常。在导入Amplify前增加校验代码,确认存储模块可用性:
如果校验步骤就抛出异常,排查项目中是否引入了自定义存储polyfill、状态持久化库、mock工具类覆盖了全局// App.js顶部 import AsyncStorage from '@react-native-async-storage/async-storage'; // 提前校验存储模块 AsyncStorage.getAllKeys() .then(keys => console.log('存储模块正常,现有key:', keys)) .catch(err => console.log('存储模块初始化异常:', err)); // 校验完成后再导入Amplify import Amplify from 'aws-amplify';AsyncStorage对象,移除冲突依赖即可。 - 修正初始化顺序与配置文件
Amplify.configure必须在项目入口文件(App.js/index.js)的最顶层调用,不要放在组件内部、异步回调中执行,避免其他业务模块提前调用Amplify方法时,存储适配器还未完成挂载- 不要直接复制旧项目的
aws-exports.js文件,在当前项目根目录执行amplify pull,按照提示选择对应云端环境,自动生成适配当前项目的配置文件,避免手动修改导致的配置遗漏、引用错误。
内容的提问来源于stack exchange,提问作者Nick Res
相关产品推荐
相关产品推荐

