如何使用 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。
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。