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

Next.js项目RTK Query无法获取deadlineStart/End字段问题

RTK Query获取带连字符接口字段返回undefined的修复方案

核心原因:JavaScript中带连字符-的对象属性无法直接通过点语法访问,你遇到的问题和RTK Query请求逻辑无关,属于属性名映射错误导致的取值失败。

常见踩坑点与修复

  • 类型声明字段不匹配
    不要在TS类型定义里直接把接口返回的deadline-start、deadline-end写成驼峰格式,带特殊字符的键需要加引号声明:

    // 错误写法
    interface ExamItem {
      id: number
      title: string
      deadlineStart: string // 和接口返回字段名不一致,取值必然为undefined
      deadlineEnd: string
    }
    
    // 正确写法
    interface ExamItem {
      id: number
      title: string
      'deadline-start': string
      'deadline-end': string
    }
    
  • 传参/取值语法错误
    父组件遍历考试列表给ExamoCard传参时,不能直接用点语法取不存在的驼峰字段,要通过方括号语法匹配真实返回的字段名:

    // 错误传参
    <ExamoCard
      // 其余参数省略
      deadlineStart={exam.deadlineStart} // exam对象上没有这个属性
      deadlineEnd={exam.deadlineEnd}
    />
    
    // 正确传参
    <ExamoCard
      // 其余参数省略
      deadlineStart={exam['deadline-start']}
      deadlineEnd={exam['deadline-end']}
    />
    

    如果觉得方括号语法写起来繁琐,可以直接在RTK Query端点定义里加响应转换,把带连字符的字段转成驼峰后再返回给业务层使用,后续全链路统一用驼峰字段即可:

    // endpoints内的接口定义
    getExams: builder.query<ExamItem[], void>({
      query: () => '/api/exams',
      transformResponse: (rawList: Array<{
        id: number
        title: string
        'deadline-start': string
        'deadline-end': string
      }>) => {
        return rawList.map(item => ({
          ...item,
          deadlineStart: item['deadline-start'],
          deadlineEnd: item['deadline-end']
        }))
      }
    })
    
  • 组件内取值语法错误
    不要在ExamoCard组件内写props.deadline-start这类语法,JS会把-识别为减法运算符直接抛语法错,如果你没有做字段转换,组件内取值也必须用props['deadline-start']的格式。

快速验证方法

拿到接口返回的单条exam对象后,直接在控制台执行console.log(exam['deadline-start']),如果能正常打印出时间值,就可以确认是属性名映射/取值语法的问题,按上面的步骤修复即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:48:21