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

React/Redux fetch请求取JSON数据时读取items属性报undefined问题

问题解决方案

错误根因

你遇到的报错本质是访问action.body.data时该值为undefined,导致继续读取items属性抛出类型错误,和Immutable库本身的使用没有直接关联。

排查及修复步骤

  • 第一步:补全fetch响应的JSON解析逻辑
    fetch接口原生返回的是Response对象,必须调用.json()方法才能解析为可直接读取的JS对象,你当前直接把fetch的返回值传给了asyncRequest,大概率是缺失了解析步骤,修改请求代码如下:
export const getItems = (searchString: string, limit?: string, offset?: string) => (dispatch: ThunkDispatch) => {
  const searchUrl = `https://search.items.ai/search?q=${searchString || ''}&offset=${offset ? offset : '0'}&limit=${limit ? limit : '10'}`
  return dispatch(
    asyncRequest(
      // 新增.then(res => res.json())解析响应
      fetch(searchUrl, {
        method: 'GET',
      }).then(res => res.json()), SEARCH_ITEMS)
  )
}
  • 第二步:确认异步中间件的action字段命名
    大部分Redux异步中间件会把请求返回的数据放在action.payload字段,而非action.body。你可以在reducer的成功分支先打印完整的action对象,确认字段结构:
case SEARCH_ITEMS.SUCCESS:
  console.log('完整action结构:', action)
  // 确认数据字段后替换对应的属性名即可
  • 第三步:添加空值防御避免报错
    不管数据结构是否符合预期,都可以通过可选链+默认值的写法避免直接抛出运行时错误:
// 替换原来的setIn行
return state.setIn([AUTOSUGGEST_ITEMS], fromJS(action?.body?.data?.items || []))
  • 第四步:验证Immutable状态路径一致性
    你当前的初始状态只定义了fetchedItems字段,新增的AUTOSUGGEST_ITEMS字段属于顶级状态key,后续在mapStateToProps中读取state.getIn(['searchReducer', searchType])的逻辑是正确的,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:06:03