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

React Native中jwtDecode调用报错:_jwtDecode.default不是函数

解决React Native中jwtDecode不是函数的Promise拒绝错误

核心问题分析

你遇到的Possible unhandled promise rejection TypeError:0,_jwtDecode.default is not a function错误,主要由两个原因导致:

  1. jwt-decode版本更新后导出方式变更,你的导入方式与当前版本不匹配;
  2. 未对jwtDecode调用添加错误捕获,token为空/无效时直接抛出错误中断代码执行,导致reached third无法打印。

具体解决方案

1. 匹配jwt-decode版本调整导入方式

jwt-decode在v4.x版本后修改了导出方式:

  • v3.x及以下版本:默认导出函数,使用:
    import jwtDecode from 'jwt-decode';
    
  • v4.x及以上版本:仅支持命名导出,必须使用:
    import { jwtDecode } from 'jwt-decode';
    

你可以查看package.json中的jwt-decode版本号,或者执行命令npm list jwt-decode确认版本,再对应调整导入代码。

2. 添加完整错误捕获与token校验

修改fetchUsers函数,增加token非空校验和try/catch块,避免未处理的Promise拒绝,同时定位具体错误:

const fetchUsers = async () => {
  try {
    const token = await AsyncStorage.getItem('authToken');
    
    console.log('Token:', token);
    console.log('reached second');

    // 先校验token是否存在
    if (!token) {
      console.log('Error: authToken不存在');
      return;
    }

    const decodedToken = jwtDecode(token);

    console.log('reached third');

    const userId = decodedToken.userId;
    setUserId(userId);
    console.log('reached here');
    console.log('Fetching users...');
    
    // 建议把axios的then/catch改为await+try/catch,保持代码风格统一
    const response = await axios.get(`http://localhost:8000/users/${userId}`);
    setUsers(response.data);
  } catch (error) {
    // 打印完整错误信息,方便定位
    console.log('处理流程出错:', error);
  }
};

3. 验证token的有效性

如果调整导入方式后仍报错,检查打印的token是否符合JWT格式(三段式结构:header.payload.signature),排除token为空、格式错误或过期的情况。


内容的提问来源于stack exchange,提问作者Raju Lorence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:01:26