Melhores Práticas para Bibliotecas React
Um resumo condensado das 25 melhores práticas mais importantes, extraídas de cada página desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 melhores práticas mais importantes, extraídas de cada página desta seção.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
result.toDataStreamResponse() (não result.text ou NextResponse.json); caso contrário, você envia um blob JSON de resposta completa e a UI de streaming useChat nunca é atualizada token a token.maxSteps têm o padrão de um único passo, então o modelo pode chamar uma ferramenta, mas nunca ver seu resultado e a conversa estagna - aumente para a profundidade máxima de raciocínio que você realmente deseja.generateObject({ schema }) com um esquema Zod impõe a forma na camada do SDK; solicitar JSON e fazer o parsing manual é frágil e desperdiça tokens em instruções de formato.InvokeCommand rejeita objetos simples em tempo de execução - envolva com new TextEncoder().encode(JSON.stringify(payload)) e decodifique a resposta simetricamente, respeitando os limites de payload de 6 MB síncrono / 256 KB assíncrono.FunctionError na resposta, não como uma exceção lançada, então inspecione o envelope da resposta - invocações assíncronas (Event) descartam erros silenciosamente, a menos que você configure uma DLQ.DescribeVoicesCommand antes de trocar de voz.TextType: "ssml" e deve ser XML válido dentro de <speak>...</speak> com &, <, > escapados; também evite saída pcm para navegadores, pois é áudio bruto - use mp3 ou ogg_vorbis.PUT diretamente para o S3 para que uploads grandes ignorem o limite de corpo de requisição do Next.js (padrão de 1 MB) e nunca toquem na largura de banda do seu servidor.PUT e o cabeçalho Content-Type - e sempre defina ContentType no comando pré-assinado para que o objeto não seja salvo como application/octet-stream.@aws-sdk/client-s3, client-lambda ou client-polly de um arquivo "use client" - credenciais acabam no bundle do navegador e o SDK v3 da AWS incha o JS do cliente; use Server Actions ou Route Handlers.new Date("2026-04-06") interpreta strings ISO apenas de data como meia-noite UTC e muda visivelmente em zonas não UTC, então prefira parseISO (mais date-fns-tz para trabalho ciente de fuso horário) para evitar bugs silenciosos de um dia de diferença.MM é mês, mm são minutos e DD é inválido (use dd) - erros de maiúsculas/minúsculas compilam bem e produzem strings silenciosamente erradas.DragOverlay renderiza a prévia de arrastar fora do fluxo do DOM e corrige o problema de "item saltando" quando o slot original colapsa; combine com opacidade reduzida no original para um visual estável.activationConstraint: { distance: 8 } (ou um atraso) ao PointerSensor para que um único clique não inicie um arrastar; sem isso, cada clique em um item ordenável dispara arrastamentos acidentais.lodash-es para que o bundler faça tree-shaking de utilitários não utilizados; import _ from "lodash" carrega todo o build CJS de ~70 KB mesmo para um único helper.debounce(fn, 300) inline na renderização retorna uma nova instância a cada renderização e nunca acumula chamadas; envolva a criação em useMemo/useCallback e chame .cancel() na limpeza do useEffect para que invocações pendentes não disparem após o desmontar.merge(target, source) do Lodash muta seu primeiro argumento, então sempre passe um {} fresco (ou cloneDeep primeiro) como alvo; prefira também structuredClone nativo em vez de cloneDeep, a menos que você precise de suporte a funções ou instâncias de classe.AUTH_SECRET, e segredos fracos comprometem todas as sessões - gere um com npx auth secret e use valores distintos por ambiente para que uma chave de desenvolvimento vazada nunca comprometa a produção.jwt/session quanto uma ampliação de módulo em types/next-auth.d.ts ou o TypeScript se desvia do tempo de execução.globalThis para que a recarga a quente de módulos não abra um novo pool de conexões a cada salvamento - sem isso, o banco de dados rapidamente recusa conexões e o servidor de desenvolvimento parece travar.Number ou String antes de passá-los para Client Components, e selecione apenas as relações que você precisa (com include/select) para evitar consultas N+1.QueryClient do TanStack Query dentro de useState(() => new QueryClient()) dentro de um provider de cliente; um cliente em nível de módulo em um Server Component vaza o estado do cache entre requisições de usuário e vaza dados entre usuários.staleTime controla quando os dados são considerados frescos e se as refetches ocorrem; gcTime controla quanto tempo consultas inativas permanecem no cache - staleTime: Infinity ainda permite a coleta de lixo, e mutações nunca invalidam automaticamente consultas relacionadas sem invalidateQueries explícito.Revisado por Chris St. John·Última atualização: 16 de jul. de 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥