Aug 25, 2024
yarn add @tanstack/react-queryreact-query.QueryClient to manage shared data access across components.index.js:
QueryClient and QueryClientProvider from @tanstack/react-query.QueryClient and wrap the App component with QueryClientProvider.useQuery hook.useQuery hook handles:
const { data, error, isLoading } = useQuery(
['todos'], // Query key
fetchTodos // Query function
);
fetch API to retrieve data:
const fetchTodos = async () => {
const response = await fetch('API_URL');
return response.json();
};
data.map().if (isLoading) return <div>Loading...</div>;
if (error) return <div>Error occurred!</div>;
useMutation for creating or altering data.const addPost = async (newPost) => {
const response = await fetch('API_URL', {
method: 'POST',
body: JSON.stringify(newPost),
headers: { 'Content-Type': 'application/json' },
});
return response.json();
};
const { mutate } = useMutation(addPost);
<button onClick={() => mutate(newPost)}>Add Post</button>
queryClient.invalidateQueries to refetch data after a mutation:
queryClient.invalidateQueries('posts');
queryClient.setQueryData:
queryClient.setQueryData('posts', (oldPosts) => [...oldPosts, newPost]);
QueryClient inside components to prevent cache resets on re-renders.index.js.retry: 3).