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

如何在React Query中获取接口返回的data.data并替代useEffect逻辑?

React Query 处理接口返回的 data.data 方案

方案一:直接在查询函数中处理返回值(推荐)

React Query 的查询函数可以直接返回你需要的最终数据,这样 useQuery 返回的 data 就是接口返回的 data.data,无需额外维护本地状态:

// React Query 实现逻辑
const { data: education, isLoading, refetch } = useQuery(
  ['education', user?.email], // 查询键,用业务相关名称更清晰
  () => 
    fetch(`http://localhost:5000/education/${user?.email}`)
      .then(res => res.json())
      .then(apiResponse => apiResponse.data) // 在这里提取 data.data 并返回
)

if (isLoading) {
  return <Loading />
}

// 后续直接使用 education 变量即可,无需调用 setEducation
// 示例渲染:
return (
  <div>
    {education?.map(item => (
      <div key={item.id}>{item.schoolName}</div>
    ))}
  </div>
)

方案二:同步到本地状态(如需兼容原有状态逻辑)

如果因为业务需求必须将数据存入自己维护的 useState,可以通过 useEffect 监听 React Query 返回的原始数据,再更新本地状态:

import { useState, useEffect } from 'react'
import { useQuery } from '@tanstack/react-query'

// 原有本地状态
const [education, setEducation] = useState(null)

const { data: apiResponse, isLoading, refetch } = useQuery(
  ['education', user?.email],
  () => 
    fetch(`http://localhost:5000/education/${user?.email}`)
      .then(res => res.json())
)

// 监听接口返回数据,更新本地状态
useEffect(() => {
  if (apiResponse) {
    setEducation(apiResponse.data)
  }
}, [apiResponse])

if (isLoading) {
  return <Loading />
}

说明:方案一利用了 React Query 的数据管理能力,减少了手动维护状态的代码,是更符合 React Query 设计理念的用法。

内容的提问来源于stack exchange,提问作者mahmudul islam asif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:15:36