1
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 再次执行再次设置状态等等。

任何帮助表示赞赏。我想将从 useQuery 获得的数据存储在状态变量中。

TIA。

4

2 回答 2

3

您现在可能希望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>
  );
};
于 2020-10-18T04:42:08.470 回答
0

你不需要,它会为你做。有关 React Query 的精彩视频是https://www.youtube.com/watch?v=DocXo3gqGdI,其中的部分实际上是通过简单地使用useQuery.

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

于 2022-03-04T11:50:58.507 回答