如何使用 ReactQuery 中的 useQuery 钩子来更新状态?

How to use useQuery hook from ReactQuery to update state?

import React, {useState, useEffect, Component} from 'react';
import {Grid, Paper, TextField} from '@material-ui/core'
import DataManager from './../data_manager/data_manager'

const dataManager = new DataManager();

const Tile = (props)=>{
    // Initializing State Variables
    const [state, setState] = useState({
        data : {}
    })

    const { status, data, error, isFetching } = useQuery("data",async()=>{
        const res = await fetch("localhost:8000");
        return res.json()
    }

    if(status==="success"){
        setState({data})
    }else{
        return(<p>Doing</p>)
    }
}

此代码会导致无限循环,渲染会一直循环进行。

我认为是因为setState导致useQuery再次执行setting the state等等。

感谢任何帮助。我想将从 useQuery 获得的数据存储在状态变量中。

TIA。

你可能想使用 useEffect 因为现在你在每次渲染时获取:

const Tile = (props) => {
  const [state, setState] = useState({
    data: {},
  });

  const { status, data, error, isFetching } = useQuery("data", async () => {
    const res = await fetch("localhost:8000");
    return res.json();
  });

  useEffect(() => {
    if (status === 'success') {
      setState({ data });
    }
  }, [status, data]);

  return status === 'success' ? (
    <div>Success and use data</div>
  ) : (
    <div>Loading</div>
  );
};

您不需要,它会为您完成。 关于 React Query 的一个很棒的视频是 https://www.youtube.com/watch?v=DocXo3gqGdI,其中的部分实际上是通过简单地使用 useQuery.

来用显式状态处理替换设置

如果您真的想设置一些状态,那么更好的方法是从 onSuccess 回调中进行设置。参见 https://react-query.tanstack.com/reference/useQuery