Jul 12, 2024
npm install react-query
import { QueryClient, QueryClientProvider } from 'react-query';
const queryClient = new QueryClient();
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
useQuery:
import { useQuery } from 'react-query';
const { data, isLoading, error } = useQuery('products', fetchProducts);
const fetchProducts = async () => {
const res = await fetch('/api/products');
return res.json();
};
const fetchProduct = async (id) => {
const res = await fetch(`/api/products/${id}`);
return res.json();
};
const { data, isLoading, error } = useQuery(['product', productId], () => fetchProduct(productId));
['product', id]refetchInterval.useQuery('products', fetchProducts, { refetchInterval: 10000 });
useInfiniteQuery for infinite scroll functionality.if (isLoading) return 'Loading...';
if (error) return 'An error occurred';
useMutation:
import { useMutation } from 'react-query';
const mutation = useMutation(newTodo => {
return fetch('/todos', {
method: 'POST',
body: JSON.stringify(newTodo)
})
});
const { mutate, isLoading, error } = useMutation(updatedProduct => axios.put(`/products/${id}`, updatedProduct));
<button onClick={() => mutate({ id: 1, title: 'Updated Title' })}>
Update Product
</button>
const mutation = useMutation(updateTodo, {
onMutate: newTodo => {},
onSuccess: data => {},
onError: (error, newTodo, context) => {},
onSettled: (data, error, newTodo, context) => {}
});
npm install react-query-devtools
import { ReactQueryDevtools } from 'react-query/devtools';
<QueryClientProvider client={queryClient}>
<App />
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
staleTime: 10000,
},
},
});
staleTime: Determines how long a query's data is considered fresh.