You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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导入方式参考:Amplify导入方式截图
  • 项目仅通过Expo运行,即使注释掉App.js中的import Amplify代码行,其他文件内所有引用Amplify相关内容的位置仍会触发相同报错
  • 项目首次加载时曾处理配置缺失问题:最初缺少aws-exports.js文件,直接从旧项目(当前项目为该旧项目的重构版本)复制了该文件;引入后因文件内对Expo Linking模块引用不当,手动修改了对应代码行,修复该引用问题后就出现了上述keys.filter报错
  • 当前即使删除aws-exports.js文件,只要在App.js中导入Amplify就会触发错误,报错截图参考:
    报错截图1
    报错截图2
排查进展
  • 已初步定位报错触发位置:自有代码可正常执行部分逻辑,报错发生在reactnative.js文件内两个内存存储模块的同步逻辑中,报错位置参考:报错位置截图
  • 已完成复现测试:将当前项目的package.json依赖配置复制到全新创建的React Native项目中,在新项目App.js内导入Amplify,未触发相同报错
  • 当前仍在排查自有代码中触发该错误的具体源头。
可行解决方案

该报错本质是Amplify的React Native存储适配器初始化时,调用存储模块的getAllKeys方法拿到了null返回值,没有拿到预期的数组类型结果,按以下优先级排查修复即可:

  1. 清理依赖与打包缓存,排除安装/缓存异常
    先终止正在运行的Expo服务,在项目根目录执行以下命令:
    rm -rf node_modules
    rm -f package-lock.json yarn.lock
    # 使用npm执行安装
    npm install
    # 若使用yarn则执行 yarn install
    # 清空Expo缓存启动服务
    npx expo start -c
    
    近7成同类报错由Expo旧打包缓存、依赖安装不完整导致,优先执行该步骤验证。
  2. 对齐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
    
  3. 排查存储模块冲突
    报错出现在存储同步逻辑,大概率是AsyncStorage模块被覆盖、或初始化异常。在导入Amplify前增加校验代码,确认存储模块可用性:
    // 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';
    
    如果校验步骤就抛出异常,排查项目中是否引入了自定义存储polyfill、状态持久化库、mock工具类覆盖了全局AsyncStorage对象,移除冲突依赖即可。
  4. 修正初始化顺序与配置文件
    • Amplify.configure必须在项目入口文件(App.js/index.js)的最顶层调用,不要放在组件内部、异步回调中执行,避免其他业务模块提前调用Amplify方法时,存储适配器还未完成挂载
    • 不要直接复制旧项目的aws-exports.js文件,在当前项目根目录执行amplify pull,按照提示选择对应云端环境,自动生成适配当前项目的配置文件,避免手动修改导致的配置遗漏、引用错误。

内容的提问来源于stack exchange,提问作者Nick Res

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:54:05