Consultas, mutações e assinaturas
Use consultas e mutações tipadas do tRPC em componentes React, com preenchimento automático completo e tipos de erro.
Consultas, mutações e assinaturas é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
Definindo um procedimento de consulta
Encadeie .input(zodSchema).query(async ({ input, ctx }) => ...) a publicProcedure. O manipulador recebe a entrada validada e o contexto da solicitação. Retorne qualquer valor serializável: um objeto, uma matriz ou um valor primitivo.
O tipo de retorno é inferido automaticamente e se torna o tipo de dados do gancho useQuery correspondente no cliente.
Chamando uma consulta a partir do React
trpc.post.getById.useQuery({ id: '1' }) chama o procedimento getById no roteador post. O gancho retorna o conhecido objeto de resultado do React Query: { data, isLoading, isError, refetch }.
O objeto de entrada é tipado estaticamente: passar { id: 123 } quando o esquema espera uma cadeia de caracteres é um erro do TypeScript detectado durante o desenvolvimento.
Definindo um procedimento de mutação
Use .input(zodSchema).mutation(async ({ input, ctx }) => ...) para operações de gravação no servidor: criar, atualizar ou excluir dados. As mutações são chamadas explicitamente, em vez de serem executadas durante a montagem.
O manipulador da mutação tem acesso ao contexto completo da solicitação (incluindo a sessão do NextAuth) por meio de ctx.
Chamando uma mutação a partir do React
const { mutate, isLoading, error } = trpc.post.create.useMutation(). Chame mutate({ title: 'New', content: '...' }) para disparar a mutação. Assim como useMutation do React Query, ela não é executada durante a montagem.
Passe funções de retorno onSuccess e onError para as opções de useMutation a fim de executar efeitos colaterais após a mutação.
Invalidando o cache após uma mutação
Para atualizar os dados de uma consulta após uma mutação bem-sucedida, use o gancho de utilitários do tRPC: const utils = trpc.useUtils(). Em onSuccess, chame utils.post.getAll.invalidate() para disparar uma nova busca da lista de publicações.
Esse é o equivalente no tRPC a React Query's queryClient.invalidateQueries() e segue o mesmo padrão de considerar os dados obsoletos e recarregá-los.
Validação da entrada com Zod
O tRPC usa o Zod para validação da entrada por padrão. O esquema do Zod é executado no servidor em tempo de execução, rejeitando entradas malformadas antes que elas cheguem ao seu manipulador. O mesmo esquema fornece tipos do TypeScript para o cliente.
Essa dupla função (validação em tempo de execução + tipos do TypeScript) elimina a duplicação: defina o contrato uma única vez no Zod e obtenha as duas garantias de segurança sem esforço adicional.
Agrupamento de solicitações com httpBatchLink
Por padrão, o tRPC usa httpBatchLink, que agrupa várias solicitações simultâneas do tRPC em uma única solicitação HTTP. Várias chamadas de useQuery no mesmo ciclo de renderização de um componente são enviadas e resolvidas juntas.
Isso reduz significativamente a sobrecarga da rede em comparação com solicitações HTTP individuais para cada consulta em uma página com várias necessidades de dados.
Visão geral das assinaturas do tRPC
Defina um procedimento de assinatura: publicProcedure.subscription(async function*() { while (true) { yield await nextEvent(); } }). As assinaturas usam geradores assíncronos e exigem um transporte WebSocket.
As assinaturas são ideais para recursos em tempo real: notificações ao vivo, cursores de edição colaborativa ou transmissão contínua de respostas de IA.
Configuração do transporte WebSocket
Substitua httpBatchLink por uma combinação de httpBatchLink e wsLink usando splitLink: encaminhe as assinaturas para wsLink e as consultas/mutações para httpBatchLink. Crie o cliente WebSocket com createWSClient({ url: 'ws://localhost:3000' }).
Esse transporte híbrido faz com que a maioria das solicitações use o agrupamento HTTP eficiente, enquanto as assinaturas usam conexões WebSocket persistentes.
Chamando assinaturas a partir do React
trpc.notifications.onNew.useSubscription(undefined, { onData: (notification) => addToList(notification), onError: console.error }) inscreve-se no procedimento. A função de retorno onData é chamada para cada valor produzido.
A assinatura é restabelecida automaticamente se o WebSocket for desconectado e se conectar novamente.
Combinando consultas, mutações e assinaturas
Uma página de lista em tempo real pode usar uma consulta para carregar a lista inicial, uma mutação para adicionar um item e uma assinatura para receber adições ao vivo de outros usuários. Os três recursos são tipados com base no mesmo AppRouter e combinam naturalmente.
A estratégia de invalidação do cache depende de você preferir um recarregamento completo (invalidar após a mutação) ou atualizações do cache (utils.post.getAll.setData).
Mutação do tRPC e invalidação do cache
Qual método utilitário do tRPC dispara uma nova busca de uma consulta depois que uma mutação é concluída com sucesso?
Resumo da lição
Defina consultas com .query() e mutações com .mutation(), ambas validadas por esquemas do Zod. No cliente, use trpc.router.procedure.useQuery() e useMutation(). Invalide as consultas após a mutação com utils.procedure.invalidate(). As assinaturas usam geradores assíncronos e exigem wsLink para o transporte WebSocket.
Por padrão, o httpBatchLink agrupa consultas simultâneas em uma única solicitação HTTP.
Perguntas Frequentes
A aula “Consultas, mutações e assinaturas” é grátis?
Sim — o texto completo de “Consultas, mutações e assinaturas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “Consultas, mutações e assinaturas”?
Use consultas e mutações tipadas do tRPC em componentes React, com preenchimento automático completo e tipos de erro. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Consultas, mutações e assinaturas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O problema resolvido pelo tRPC
- Configurando tRPC com React e Next.js
- Consultas, mutações e assinaturas
- Integrando tRPC com React Query e autenticação