SWR, TanStack Query | React
- SWR, TanStack Query | React
Essas são ferramentas ou bibliotecas utilizadas no desenvolvimento de aplicações web modernas, principalmente para lidar com o gerenciamento de dados remotos, cache e suspense em React.
SWR
SWR é uma biblioteca desenvolvida pela Vercel, focada em data fetching (busca de dados) com React. O nome SWR vem de "Stale-While-Revalidate", um padrão de cache que revalida os dados antigos enquanto busca os novos, garantindo que a aplicação permaneça responsiva.
Principais funcionalidades do SWR
- Revalidação automática: Atualiza os dados automaticamente em segundo plano.
- Cache integrado: Dados são armazenados localmente para melhorar o desempenho.
- Suporte a otimizações: Otimizações como revalidação com foco na tela visível.
- Facilidade com hooks: Fornece uma API simples usando hooks do React.
- Configuração mínima: Funciona "out-of-the-box".
- Suporte a polling e revalidação sob demanda.
Exemplo de uso do SWR
npm install swr
import useSWR from 'swr';
// Função de busca de dados
const fetcher = (url) => fetch(url).then((res) => res.json());
export default function App() {
const { data, error, isLoading } = useSWR('/api/data', fetcher);
if (error) return <div>Erro ao carregar dados</div>;
if (isLoading) return <div>Carregando...</div>;
return (
<div>
<h1>Dados:</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
Funcionalidades avançadas do SWR
-
Revalidação automática em foco da tela:
const { data } = useSWR('/api/data', fetcher, { revalidateOnFocus: true }); -
Polling com intervalo:
const { data } = useSWR('/api/data', fetcher, { refreshInterval: 5000 }); -
Revalidação manual:
const { data, mutate } = useSWR('/api/data', fetcher);
mutate(); // Atualiza manualmente os dados
TanStack Query (anteriormente React Query)
TanStack Query é uma biblioteca mais abrangente e poderosa que SWR, focada em gerenciamento de estados de servidor. Ela é ideal para gerenciar fluxos complexos de busca de dados, cache, sincronização, e muito mais.
Principais funcionalidades
- Gerenciamento avançado de cache.
- Revalidação sob demanda ou automática.
- Manipulação de estados de erro, carregamento e sucesso.
- Páginas e paginação.
- Pooling e invalidation.
- Suporte para SSR e prefetching.
Instalação
npm install @tanstack/react-query
Exemplo básico com useQuery
import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query';
const queryClient = new QueryClient();
function fetchData() {
return fetch('/api/data').then((res) => res.json());
}
function App() {
const { data, isLoading, isError } = useQuery(['data'], fetchData);
if (isLoading) return <div>Carregando...</div>;
if (isError) return <div>Erro ao carregar dados</div>;
return (
<div>
<h1>Dados:</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
export default function Main() {
return (
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
);
}
Funcionalidades avançadas
-
Polling:
useQuery(['data'], fetchData, { refetchInterval: 5000 }); -
Invalidando cache manualmente:
const queryClient = useQueryClient();
queryClient.invalidateQueries(['data']); -
Prefetching:
queryClient.prefetchQuery(['data'], fetchData); -
Paginação:
const { data } = useQuery(['data', page], () => fetchPage(page));
Comparação SWR vs TanStack Query
| Característica | SWR | TanStack Query |
|---|---|---|
| Complexidade | Simples e leve | Completo e poderoso |
| Cache | Local | Cache avançado com políticas |
| Prefetch | Limitado | Suporte completo |
| Páginas e Paginação | Não nativo | Suporte completo |
| SSR | Simples | Avançado |