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

求助:Node/Express接口数据无法在React组件中正常显示

问题定位与修复方案

核心问题1:异步请求未正确等待,导致payload为undefined

在fetchData action函数中,axios请求没有添加await,此时res是未resolved的Promise对象,而非接口响应结果,res.data自然是undefined。dispatch后reducer返回undefined,触发控制台报错:

Uncaught (in promise) Error: When called with an action of type "fetch_data", the slice reducer for key "safety" returned undefined.

修复代码:

export const fetchData = () => async (dispatch) => {
    const res = await axios('/api/safety'); // 添加await等待请求完成
    dispatch({ type: FETCH_DATA, payload: res.data });
};

核心问题2:Reducer初始状态不合理,导致map操作报错

safetyReducer的初始状态设为null,而组件中CarDetails会对data执行map操作。当数据未加载完成或加载失败时,null.map()就会触发页面报错:

Uncaught runtime error: can not read properties of null (reading 'map').

修复代码:

import { FETCH_DATA } from '../actions/types';
function safetyReducer(state = [], action) { // 将初始状态从null改为空数组
    switch (action.type) {
        case FETCH_DATA:
            return action.payload;
        default:
            return state;
    }
}

export default safetyReducer;

额外优化建议

为了提升用户体验,可在组件中添加加载状态判断:

// Cars.js组件中修改return部分
return (
    <div>
        Cars
        {data.length ? <CarDetails data={data} /> : <div>数据加载中...</div>}
    </div>
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:07:03