React从16.13.1升级到18.2.0后Axios1.3.4迭代器错误如何修复?
解决React升级后Axios 1.3.4版本出现的“Cannot read properties of undefined (reading '@@__symbol:iterator')”错误
以下是针对该问题的几种排查和修复方案:
检查拦截器中的数据遍历逻辑
Axios从0.x升级到1.x后,响应/请求拦截器的处理逻辑有细节变化。如果你的拦截器中直接对response.data或某个可能为undefined的对象做遍历操作(比如for...of循环),就会触发这个迭代器未找到的错误。
修复时先判断目标数据是否存在且可遍历:// 风险写法:未判断response.data是否存在 axios.interceptors.response.use(res => { for (const item of res.data) { // 处理逻辑 } return res; }); // 修复写法 axios.interceptors.response.use(res => { // 先确认数据存在且具备迭代器 if (res.data && typeof res.data[Symbol.iterator] === 'function') { for (const item of res.data) { // 处理逻辑 } } return res; });替换过时的Axios API
Axios 1.x正式废弃了axios.all和axios.spread方法,改用原生Promise.all即可解决潜在的兼容问题:// 旧写法 axios.all([axios.get('/api/1'), axios.get('/api/2')]) .then(axios.spread((res1, res2) => { // 处理结果 })); // 新写法 Promise.all([axios.get('/api/1'), axios.get('/api/2')]) .then(([res1, res2]) => { // 处理结果 });补充ES6+特性的Polyfill
React 18和Axios 1.x对运行环境的ES特性要求更高,如果你的项目未配置完整的polyfill,低版本浏览器可能缺失Symbol.iterator这类特性。可以安装并引入core-js补充:- 安装依赖:
npm install core-js@3 --save - 在项目入口文件(如
src/index.js)顶部添加:import 'core-js/es/symbol/iterator';
- 安装依赖:
逐步升级Axios版本排查冲突
如果上述方案无效,可先尝试升级到Axios 1.2.x版本,验证是否仍出现错误,逐步缩小问题范围。同时检查项目中是否有依赖Axios的第三方库(如请求封装工具)未适配Axios 1.x版本,这类情况也可能导致兼容性报错。
内容的提问来源于stack exchange,提问作者Shirin
相关产品推荐
相关产品推荐

