Ana*_*ble 3 javascript reactjs react-query
我正在使用“react-query”从组件调用 API。为了解决这个问题,我将从 API 返回一个模拟响应。
每次,我打开下拉菜单时,都会调用 useQuery 函数,该函数又调用模拟 API。
应用程序.js
import React from 'react';
import './style.css';
import { QueryClient, QueryClientProvider } from 'react-query';
import { DropDown } from './Dropdown.js';
const queryClient = new QueryClient();
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<DropDown />
</div>
</QueryClientProvider>
);
}
Run Code Online (Sandbox Code Playgroud)
Dropdown.js
import React from 'react';
import { useQuery } from 'react-query';
export const DropDown = () => {
console.log('DropDown re-rendered');
const { data, isLoading, isError } = useQuery('API', () => {
return new Promise((resolve, reject) => {
console.log('API called');
resolve(['mockData']);
});
});
return (
<>
<select>
<option> 1 </option>
<option> 2 </option>
</select>
</>
);
};
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到演示: https: //react-quxtxd.stackblitz.io
在控制台中,您将看到每次打开下拉菜单时,都会调用 useQuery 。
Stackblitz 编辑器网址:https://stackblitz.com/edit/react-quxtxd ?file=src/Dropdown.js
作为避免这种情况的替代方案,我可以使用传统的 useEffect 进行 API 调用,但我一直在考虑利用 useQuery 提供的缓存优势,但由于这个“重新渲染”问题,我陷入了困境。
有什么建议/修改吗?
{ refetchOnWindowFocus: false }
Run Code Online (Sandbox Code Playgroud)
用法:
const { data, status } = useQuery("users", fetchUsers, {
refetchOnWindowFocus: false
});
Run Code Online (Sandbox Code Playgroud)
如果您的所有查询都需要此配置。最好将其添加到defaultOptions您的 queryClient 中
// App.tsx
const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
},
},
});
<QueryClientProvider client={queryClient}>
...
</QueryClientProvider>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9638 次 |
| 最近记录: |