React6 min read

React Query

Fetch, cache, and sync server data with React Query.

Sarah Johnson
December 20, 2025
0.0k0

React Query simplifies data fetching and caching.

Install

```bash npm install @tanstack/react-query ```

Setup

```javascript import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

function App() { return ( <QueryClientProvider client={queryClient}> <Users /> </QueryClientProvider> ); } ```

Fetching Data

```javascript import { useQuery } from '@tanstack/react-query';

function Users() { const { data, isLoading, error } = useQuery({ queryKey: ['users'], queryFn: () => fetch('/api/users').then(res => res.json()) });

if (isLoading) return <p>Loading...</p>; if (error) return <p>Error: {error.message}</p>;

return ( <div> {data.map(user => <p key={user.id}>{user.name}</p>)} </div> ); } ```

Mutations

```javascript import { useMutation, useQueryClient } from '@tanstack/react-query';

function CreateUser() { const queryClient = useQueryClient();

const mutation = useMutation({ mutationFn: (newUser) => fetch('/api/users', { method: 'POST', body: JSON.stringify(newUser) }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); } });

return ( <button onClick={() => mutation.mutate({ name: 'John' })}> Add User </button> ); } ```

Remember

- Automatic caching - Background refetching - Optimistic updates - Better than useState + useEffect

> Next: Learn state management with Zustand!

#React#React Query#Data Fetching#Intermediate