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

React Query+Axios获取Todo数组报错:Property 'map'不存在于类型'never'

解决React Query获取Todo数组时的类型错误问题

1. 确保fetchTodos函数正确返回数据

你的axios.get<Todo[]>虽然指定了响应类型,但如果函数没有返回response.data,会导致返回值类型错误(比如void)。修正后的函数应该明确返回Todo数组:

interface Todo {
  id: number;
  title: string;
  completed: boolean;
}

const fetchTodos = async (): Promise<Todo[]> => {
  const response = await axios.get<Todo[]>('https://jsonplaceholder.typicode.com/todos');
  // 必须返回响应中的data字段,而非整个AxiosResponse对象
  return response.data;
};

2. 给useQuery显式指定泛型类型

React Query默认会根据fetch函数推断类型,但显式指定泛型可以避免类型歧义,同时明确错误类型:

import { useQuery } from '@tanstack/react-query';

const { data: todos, isLoading, error } = useQuery<Todo[], Error>(
  ['todos'], // 查询键
  fetchTodos
);

3. 处理数据加载/错误/空值状态

即使fetch逻辑正确,React Query在初始加载阶段data会是undefined,必须先判断数据存在再调用map,否则会触发类型错误:

// 加载中状态
if (isLoading) {
  return <div>加载中...</div>;
}

// 错误状态
if (error) {
  return <div>请求失败:{error.message}</div>;
}

// 数据为空或未定义的情况
if (!todos) {
  return <div>暂无Todo数据</div>;
}

// 渲染Todo列表
return (
  <ul>
    {todos.map(todo => (
      <li key={todo.id}>
        {todo.completed ? <s>{todo.title}</s> : todo.title}
      </li>
    ))}
  </ul>
);

4. 检查TypeScript严格模式配置

如果项目启用了TypeScript严格模式,确保tsconfig.json中相关配置正常,比如strictNullChecks开启时,必须严格处理undefined类型的情况——这也是触发"Query data cannot be undefined"提示的核心原因,做好状态判断即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:02:35