Reactjs - 数据被多次获取
Reactjs - Data is being fetched multiple times
大家好,我最近开始使用 React,我有一个简单的问题,我有一个应该获取内容并将响应存储在变量数据中的函数。页面加载后,当我控制台记录它时,我看到数据被多次获取,当我刷新它时,它又加载了几次。我该如何解决这个问题?
import {useQuery} from "react-query";
import axios from "axios";
const fetchBrands = async () =>{
const res = await axios.get("APIURL");
return res.data;
}
export default function LoadBrands() {
const {data, status} = useQuery('getbrand', fetchBrands);
return(
<>
{status === 'loading' && <div>Loading</div>}
{status === 'error' && <div>Error Loading</div>}
{status === 'success' && <div>YUPP</div>}
{console.log(data)}
</>
)
}
所以嘿,这里几乎没有错
您正在使用 react-query
,但您没有使用任何查询缓存,如果状态发生变化,则在每次重新渲染时调用 api。
此外,视图层的 console.log 也不能很好地表明它正在获取数据
fethbrand
函数的控制台更加准确
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from "react";
import ReactDOM from "react-dom";
import { useQuery, QueryCache, ReactQueryCacheProvider } from "react-query";
import axios from "axios";
const queryCache = new QueryCache();
const fetchBrands = async () => {
const res = await axios.get(
"https://api.github.com/repos/tannerlinsley/react-query"
);
console.log("test here if it will call api");
return res.data;
};
function LoadBrands() {
const { data, status } = useQuery("getbrand", fetchBrands);
return (
<>
{status === "loading" && <div>Loading</div>}
{status === "error" && <div>Error Loading</div>}
{status === "success" && <div>YUPP</div>}
{console.log(data)}
</>
);
}
export default function App() {
return (
<ReactQueryCacheProvider queryCache={queryCache}>
<LoadBrands />
</ReactQueryCacheProvider>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
继承人 fiddle : https://codesandbox.io/s/bold-dawn-huudy?file=/src/index.js
大家好,我最近开始使用 React,我有一个简单的问题,我有一个应该获取内容并将响应存储在变量数据中的函数。页面加载后,当我控制台记录它时,我看到数据被多次获取,当我刷新它时,它又加载了几次。我该如何解决这个问题?
import {useQuery} from "react-query";
import axios from "axios";
const fetchBrands = async () =>{
const res = await axios.get("APIURL");
return res.data;
}
export default function LoadBrands() {
const {data, status} = useQuery('getbrand', fetchBrands);
return(
<>
{status === 'loading' && <div>Loading</div>}
{status === 'error' && <div>Error Loading</div>}
{status === 'success' && <div>YUPP</div>}
{console.log(data)}
</>
)
}
所以嘿,这里几乎没有错
您正在使用 react-query
,但您没有使用任何查询缓存,如果状态发生变化,则在每次重新渲染时调用 api。
此外,视图层的 console.log 也不能很好地表明它正在获取数据
fethbrand
函数的控制台更加准确
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from "react";
import ReactDOM from "react-dom";
import { useQuery, QueryCache, ReactQueryCacheProvider } from "react-query";
import axios from "axios";
const queryCache = new QueryCache();
const fetchBrands = async () => {
const res = await axios.get(
"https://api.github.com/repos/tannerlinsley/react-query"
);
console.log("test here if it will call api");
return res.data;
};
function LoadBrands() {
const { data, status } = useQuery("getbrand", fetchBrands);
return (
<>
{status === "loading" && <div>Loading</div>}
{status === "error" && <div>Error Loading</div>}
{status === "success" && <div>YUPP</div>}
{console.log(data)}
</>
);
}
export default function App() {
return (
<ReactQueryCacheProvider queryCache={queryCache}>
<LoadBrands />
</ReactQueryCacheProvider>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
继承人 fiddle : https://codesandbox.io/s/bold-dawn-huudy?file=/src/index.js