React Query 不获取 API - 导致数据返回“undefined”

React Query doesn't fetch API - causing data to return 'undefined'

提问人:iceyisaak 提问时间:11/7/2023 最后编辑:iceyisaak 更新时间:11/7/2023 访问量:66

问:

我一直在尝试使用与另一个项目中对我有用的相同代码模式从 JSON 服务器获取数据。但是,这次该函数似乎由于某种原因没有被调用,导致数据返回“未定义”。我在这里错过了什么?GET@tanstack/react-query

以下是组件中的代码:task-list.tsx

import { fetchAllTasks } from "../../api/tasks-api"
import TaskItem from "./task-item/task-item"

import style from './task-list.module.scss'



const TaskList = () => {

    // This supposed to work, but isn't!
    const { data: tasks, isLoading } = fetchAllTasks()
    

    // This logs: undefined
    console.log('tasklists - fetchAllTasks:', tasks) 


    return (
        <div className={`${style['TaskList']}`}>
            <ul>
                {
                    !isLoading && tasks && tasks?.length < 1 ?
                        <p className={`${style['no-task']}`}>
                            +++ Task List is Empty +++
                        </p>
                        :
                        tasks?.map((task) =>
                            <TaskItem
                                key={task.toString()}
                                atom={task}
                            />
                        )
                }
            </ul>
        </div>
    )
}

export default TaskList

这是 :fetchAllTasks()task-api.ts

import { useQuery } from "@tanstack/react-query"
import axios from "axios"
import { Task } from "../types"


export const fetchAllTasks = () => {

    return useQuery({
        queryKey: ['tasks'],
        queryFn: async () => {
            const response = await axios.get('http://localhost:3100/tasks')
            const data: unknown = await response.data()
            
            // This doesn't appear in the console log at all
            console.log('data: ', data)


            return data as Task[]
        }
    })
}

以下是浏览器中显示的内容:

The bug as shown in the browser

以下是来自后端的响应:

enter image description here

以下是页面刷新后浏览器的网络选项卡的外观。

enter image description here

enter image description here

项目存储库的链接:https://github.com/iceyisaak/todoapp/tree/tanstack-query/src

非常感谢:)

reactjs json-server tanstackreact-query

评论

1赞 Anton 11/7/2023
您是否在浏览器的“网络”选项卡中验证了请求是否成功?它可能由于 CORS 问题或其他原因而失败。
0赞 iceyisaak 11/7/2023
谢谢你指出这一点。我添加了屏幕截图以提供有关此的更多信息。我真的很想知道你对此的看法。

答:

1赞 dim_dev 11/7/2023 #1

Axios 将数据作为属性返回,因此您不会在响应对象上将数据作为方法调用,并且因为它是不需要使用 await 的属性。

 const response = await axios.get('http://localhost:3100/tasks')
 const data: unknown = response.data

评论

1赞 iceyisaak 11/7/2023
那是杀手锏!!非常感谢您的宝贵帮助!