react-standards
React Standards
Guia de boas práticas de performance para React e Next.js, adaptado para o projeto. Contém 70 regras em 8 categorias, priorizadas por impacto para guiar refatorações e geração de código.
Quando usar
Use estas diretrizes quando:
- Criar componentes React ou páginas Next.js
- Implementar data fetching (client ou server-side)
- Revisar código para performance
- Refatorar código React/Next.js
- Otimizar bundle ou tempos de carregamento
Princípio LIFT
Antes de criar novo componente, hook, utilitário, cache, fluxo async ou abstração estrutural, aplique LIFT:
Locate- localize componentes, hooks, helpers, padrões e referências já existentes no projeto.Identify- identifique o que já resolve parte do problema e onde existe duplicação real.Find- encontre o menor ponto coerente de reutilização, extensão ou composição antes de introduzir código novo.Try to be DRY- tente ser DRY sem criar abstrações prematuras, wrappers desnecessários ou camadas genéricas que prejudiquem legibilidade e performance.
Use LIFT para preferir reaproveitamento claro e consistente, sem sacrificar simplicidade local.
Integracao com outras skills
- Ao alterar tipagem geral, contratos compartilhados ou modelagem TypeScript, seguir
typescript-standards. - Ao sugerir ou executar scripts do projeto, respeitar a stack e os scripts ja configurados no projeto.
- Ao preparar commits, seguir
git-commit. - Em caso de conflito,
react-standardsprevalece para performance, rendering e arquitetura React/Next.js;typescript-standardspara regras gerais de TypeScript;git-commitpara commits.
Categorias por prioridade
| Prioridade | Categoria | Impacto | Prefixo |
|---|---|---|---|
| 1 | Eliminating Waterfalls | CRITICAL | async- |
| 2 | Bundle Size Optimization | CRITICAL | bundle- |
| 3 | Server-Side Performance | HIGH | server- |
| 4 | Client-Side Data Fetching | MEDIUM-HIGH | client- |
| 5 | Re-render Optimization | MEDIUM | rerender- |
| 6 | Rendering Performance | MEDIUM | rendering- |
| 7 | JavaScript Performance | LOW-MEDIUM | js- |
| 8 | Advanced Patterns | LOW | advanced- |
Referência rápida
1. Eliminating Waterfalls (CRITICAL)
async-cheap-condition-before-await- Verifique condições síncronas baratas antes de aguardar flags ou valores remotosasync-defer-await- Mova await para os ramos onde é usadoasync-parallel- Use Promise.all() para operações independentesasync-dependencies- Use better-all para dependências parciaisasync-api-routes- Inicie promises cedo, aguarde tarde em API routesasync-suspense-boundaries- Use Suspense para streaming de conteúdo
2. Bundle Size Optimization (CRITICAL)
bundle-barrel-imports- Importação direta, evitar barrel filesbundle-analyzable-paths- Preferir caminhos analisáveis estaticamente para evitar bundles amplosbundle-dynamic-imports- Usar next/dynamic para componentes pesadosbundle-defer-third-party- Carregar analytics/logging após hydrationbundle-conditional- Carregar módulos apenas quando a feature estiver ativabundle-preload- Preload em hover/focus para ganho de velocidade percebida
3. Server-Side Performance (HIGH)
server-auth-actions- Autenticar server actions como API routesserver-cache-react- Usar React.cache() para deduplicação por requestserver-cache-lru- Usar cache LRU entre requestsserver-dedup-props- Evitar serialização duplicada em props de RSCserver-hoist-static-io- Elevar I/O estático (fonts, logos) para nível de móduloserver-no-shared-module-state- Evitar estado mutável de request em nível de módulo (RSC/SSR)server-serialization- Minimizar dados enviados para client componentsserver-parallel-fetching- Reestruturar componentes para paralelizar fetchesserver-parallel-nested-fetching- Encadear fetches por item com Promise.allserver-after-nonblocking- Usar after() para operações não bloqueantes
4. Client-Side Data Fetching (MEDIUM-HIGH)
client-swr-dedup- Usar SWR para deduplicação automáticaclient-event-listeners- Deduplicar listeners globaisclient-passive-event-listeners- Usar listeners passive para scrollclient-localstorage-schema- Versionar e minimizar dados no localStorage
5. Re-render Optimization (MEDIUM)
rerender-defer-reads- Não assinar estado usado apenas em callbacksrerender-memo- Extrair trabalho caro para componentes memo-izadosrerender-memo-with-default-value- Elevar props não primitivas padrãorerender-dependencies- Usar dependências primitivas em effectsrerender-derived-state- Assinar estado derivado, não valores brutosrerender-derived-state-no-effect- Derivar estado no render, não em effectsrerender-functional-setstate- Usar setState funcional para callbacks estáveisrerender-lazy-state-init- Passar função para useState em valores carosrerender-simple-expression-in-memo- Evitar memo para primitivas simplesrerender-split-combined-hooks- Dividir hooks com dependências independentesrerender-move-effect-to-event- Mover lógica de interação para handlersrerender-transitions- Usar startTransition para updates não urgentesrerender-use-deferred-value- Adiar renders caros para manter input responsivorerender-use-ref-transient-values- Usar refs para valores transientes frequentesrerender-no-inline-components- Não definir componentes dentro de componentes
6. Rendering Performance (MEDIUM)
rendering-animate-svg-wrapper- Animar wrapper div, não o SVGrendering-content-visibility- Usar content-visibility para listas longasrendering-hoist-jsx- Extrair JSX estático fora de componentesrendering-svg-precision- Reduzir precisão de coordenadas SVGrendering-hydration-no-flicker- Usar script inline para dados client-onlyrendering-hydration-suppress-warning- Suprimir mismatches esperadosrendering-activity- Usar Activity component para show/hiderendering-conditional-render- Usar ternário, não &&, em condicionaisrendering-usetransition-loading- Preferir useTransition para loading staterendering-resource-hints- Usar resource hints do React DOM para preloadrendering-script-defer-async- Usar defer ou async em script tags
7. JavaScript Performance (LOW-MEDIUM)
js-batch-dom-css- Agrupar mudanças de CSS via classes ou cssTextjs-index-maps- Criar Map para buscas repetidasjs-cache-property-access- Cachear propriedades em loopsjs-cache-function-results- Cachear resultados em Map de módulojs-cache-storage- Cachear leituras de localStorage/sessionStoragejs-combine-iterations- Combinar filter/map em um loopjs-length-check-first- Checar tamanho antes de comparações carasjs-early-exit- Retornar cedo em funçõesjs-hoist-regexp- Elevar RegExp para fora de loopsjs-min-max-loop- Usar loop para min/max em vez de sortjs-set-map-lookups- Usar Set/Map para buscas O(1)js-tosorted-immutable- Usar toSorted() para imutabilidadejs-flatmap-filter- Usar flatMap para map+filter em uma passadajs-request-idle-callback- Adiar trabalho não crítico para idle
8. Advanced Patterns (LOW)
advanced-effect-event-deps- Não colocar resultados deuseEffectEventnas depsadvanced-event-handler-refs- Armazenar handlers em refsadvanced-init-once- Inicializar app uma vez por cargaadvanced-use-latest- useLatest para refs de callback estáveis
Como usar
Antes de aplicar uma regra ou criar uma nova abstração, aplique LIFT.
Leia os arquivos de regras para explicações detalhadas e exemplos de código:
references/async-parallel.md
references/bundle-barrel-imports.md
Cada arquivo de regra contém:
- Explicação breve do impacto
- Exemplo incorreto com explicação
- Exemplo correto com explicação
- Contexto adicional e referências
Documento completo
Para o guia completo com todas as regras: RULES.md
More from hebertpaziam/skills
typescript-standards
Apply TypeScript design standards when creating or refactoring functions, methods, classes, modules, or shared contracts (interfaces, types, enums). Trigger for: typing decisions, domain modeling, architecture design (boundaries, DI, composition, API design), and design principles (SOLID, GoF, KISS, YAGNI, LIFT). Do NOT trigger for routine component edits already covered by framework-specific skills (angular-standards, vue-standards).
11git-commit
Execute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
9angular-standards
Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling. Enforces project conventions including LIFT principle, OnPush, inject(), signal-first state, BEM/SCSS standards, and opinionated testing rules.
7openspec-propose
Proponha uma nova change do OpenSpec e gere todos os artifacts em uma etapa. Use quando o usuário quiser descrever rapidamente o que quer construir e sair com proposal, design, specs e tasks prontas para implementação.
4openspec-explore
Entre em explore mode do OpenSpec para explorar ideias, investigar problemas e esclarecer requisitos. Use quando o usuário quiser pensar antes ou durante uma change.
4openspec-apply-change
Implemente tasks de uma change do OpenSpec. Use quando o usuário quiser começar a implementar, continuar a implementação ou avançar nas tasks de uma change.
4