use no memo

"use no memo" impede que uma função seja otimizada pelo React Compiler.


Referência

"use no memo"

Adicione "use no memo" no início de uma função para impedir a otimização pelo React Compiler.

function MyComponent() {
"use no memo";
// ...
}

Quando uma função contém "use no memo", o React Compiler a ignorará completamente durante a otimização. Isso é útil como uma saída temporária ao depurar ou ao lidar com código que não funciona corretamente com o compilador.

Ressalvas

  • "use no memo" deve estar no início do corpo da função, antes de quaisquer imports ou outro código (comentários são permitidos).
  • A diretiva deve ser escrita com aspas duplas ou simples, não com crases.
  • A diretiva deve corresponder exatamente a "use no memo" ou seu alias "use no forget".
  • Esta diretiva tem precedência sobre todos os modos de compilação e outras diretivas.
  • Destina-se a ser uma ferramenta de depuração temporária, não uma solução permanente.

Como "use no memo" desabilita a otimização

O React Compiler analisa seu código em tempo de compilação para aplicar otimizações. "use no memo" cria um limite explícito que instrui o compilador a ignorar uma função inteiramente.

Esta diretiva tem precedência sobre todas as outras configurações:

  • No modo all: A função é ignorada apesar da configuração global
  • No modo infer: A função é ignorada mesmo que heurísticas a otimizassem

O compilador trata essas funções como se o React Compiler não estivesse habilitado, deixando-as exatamente como escritas.

Quando usar "use no memo"

"use no memo" deve ser usado com moderação e temporariamente. Cenários comuns incluem:

Depurando problemas do compilador

Quando você suspeita que o compilador está causando problemas, desabilite temporariamente a otimização para isolar o problema:

function ProblematicComponent({ data }) {
"use no memo"; // TODO: Remover após corrigir o problema #123

// Violações das Regras do React que não foram detectadas estaticamente
// ...
}

Integração com bibliotecas de terceiros

Ao integrar com bibliotecas que podem não ser compatíveis com o compilador:

function ThirdPartyWrapper() {
"use no memo";

useThirdPartyHook(); // Tem efeitos colaterais que o compilador pode otimizar incorretamente
// ...
}

Uso

A diretiva "use no memo" é colocada no início do corpo de uma função para impedir que o React Compiler otimize essa função:

function MyComponent() {
"use no memo";
// Corpo da função
}

A diretiva também pode ser colocada no topo de um arquivo para afetar todas as funções nesse módulo:

"use no memo";

// Todas as funções neste arquivo serão ignoradas pelo compilador

"use no memo" no nível da função substitui a diretiva no nível do módulo.


Solução de problemas

Diretiva não impede a compilação

Se "use no memo" não estiver funcionando:

// ❌ Errado - diretiva após o código
function Component() {
const data = getData();
"use no memo"; // Tarde demais!
}

// ✅ Correto - diretiva primeiro
function Component() {
"use no memo";
const data = getData();
}

Verifique também:

  • Ortografia - deve ser exatamente "use no memo"
  • Aspas - devem ser usadas aspas simples ou duplas, não crases

Melhores práticas

Sempre documente o motivo pelo qual você está desabilitando a otimização:

// ✅ Bom - explicação clara e rastreamento
function DataProcessor() {
"use no memo"; // TODO: Remover após corrigir a violação da regra do React
// ...
}

// ❌ Ruim - sem explicação
function Mystery() {
"use no memo";
// ...
}

Veja também