<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DUMB DEV Community: Nathana Facion</title>
    <description>The latest articles on DUMB DEV Community by Nathana Facion (@nathdev).</description>
    <link>https://dumb.dev.to/nathdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1763055%2Fcd787aa8-e2b7-4ca1-8aa0-e51c490f378d.jpeg</url>
      <title>DUMB DEV Community: Nathana Facion</title>
      <link>https://dumb.dev.to/nathdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dumb.dev.to/feed/nathdev"/>
    <language>en</language>
    <item>
      <title>O que é Module Federation?</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Thu, 01 Jan 2026 14:56:19 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/o-que-e-module-federation-4em4</link>
      <guid>https://dumb.dev.to/nathdev/o-que-e-module-federation-4em4</guid>
      <description>&lt;p&gt;O Module Federation é uma das funcionalidades mais poderosas introduzidas no Webpack 5. Ele mudou a forma como pensamos em arquitetura de front-end, permitindo que diferentes aplicações compartilhem código de forma dinâmica em tempo de execução.&lt;/p&gt;

&lt;p&gt;Aqui está uma explicação detalhada para você entender o conceito, as vantagens e como ele funciona na prática.&lt;/p&gt;

&lt;p&gt;Imagine que você tem vários micro-frontends (pequenas aplicações independentes). Antes do Module Federation, para compartilhar um componente (como um botão ou um menu) entre eles, você precisava publicar esse componente como um pacote no NPM, instalá-lo em todas as aplicações e buildar tudo novamente.&lt;/p&gt;

&lt;p&gt;Com o Module Federation, uma aplicação pode expor parte do seu código (componentes, funções, estados) e outra aplicação pode consumir esse código sem precisar instalar nada ou buildar novamente. O código é carregado diretamente do “servidor” da aplicação de origem no momento em que o usuário acessa o site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conceitos Chave:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Host:&lt;/strong&gt; A aplicação “mestre” que recebe os módulos.&lt;br&gt;
&lt;strong&gt;Remote:&lt;/strong&gt; A aplicação “servidora” que expõe os módulos.&lt;br&gt;
&lt;strong&gt;Exposes:&lt;/strong&gt; A lista de arquivos que o Remote decide compartilhar.&lt;br&gt;
&lt;strong&gt;Remotes:&lt;/strong&gt; A lista de endereços que o Host usará para buscar o código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que ele é revolucionário?
&lt;/h2&gt;

&lt;p&gt;O Module Federation resolve os principais problemas de arquiteturas de &lt;br&gt;
Micro-frontends:&lt;br&gt;
&lt;strong&gt;Independência de Deploy:&lt;/strong&gt; Você pode atualizar o menu no “Projeto A” e ele será atualizado automaticamente no “Projeto B” (o Host), sem que você precise mexer no código do Projeto B.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compartilhamento de Dependências:&lt;/strong&gt; Se o Host e o Remote usam o React, o Module Federation é inteligente o suficiente para carregar o React apenas uma vez, economizando banda e memória.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Diferente de usar iframes (que são pesados e isolados), o Module Federation compartilha o mesmo contexto de execução do JavaScript.&lt;/p&gt;

&lt;p&gt;O post ficou grande, então o restante está no site abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nathanafacion.substack.com/p/o-que-e-module-federation" rel="noopener noreferrer"&gt;https://nathanafacion.substack.com/p/o-que-e-module-federation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>frontend</category>
      <category>microfrontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Dominando o package.json: Como preparar sua biblioteca para o ecossistema moderno</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Tue, 30 Dec 2025 20:25:59 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/dominando-o-packagejson-como-preparar-sua-biblioteca-para-o-ecossistema-moderno-47gn</link>
      <guid>https://dumb.dev.to/nathdev/dominando-o-packagejson-como-preparar-sua-biblioteca-para-o-ecossistema-moderno-47gn</guid>
      <description>&lt;p&gt;Você finalmente terminou aquela biblioteca utilitária ou componente que resolve um problemão. Agora, quer publicar no NPM. Mas aí vem a dúvida: como garantir que ela funcione para todo mundo?&lt;/p&gt;

&lt;p&gt;Hoje em dia, o ecossistema JavaScript está dividido entre o antigo CommonJS (CJS) e o moderno ES Modules (ESM). Se você configurar errado, seu usuário vai dar de cara com o erro: Err: Module Not Found ou require is not defined.&lt;/p&gt;

&lt;p&gt;Neste guia, vamos dissecar o package.json perfeito.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. O Ponto de Entrada: main vs module
&lt;/h2&gt;

&lt;p&gt;Antigamente, só precisávamos do campo main. Hoje, a história é outra:&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;main: *&lt;/em&gt; Aponta para o arquivo no formato CommonJS. É o que permite que alguém use const suaLib = require('sua-lib'). Geralmente gerado em .js puro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;module:&lt;/strong&gt; Aponta para o arquivo no formato ES Modules. É o que permite o uso de import { funcionalidade } from 'sua-lib'. Geralmente gerado em .mjs.&lt;/p&gt;

&lt;p&gt;Por que ter os dois? Porque você quer que sua biblioteca seja “Universal”. Se o seu usuário estiver em um projeto Legado, o main salva ele. Se estiver em um projeto moderno (como Vite ou Next.js), o module garante performance e suporte a Tree Shaking (remover código que não está sendo usado).&lt;/p&gt;

&lt;h2&gt;
  
  
  2. A Magia do campo exports
&lt;/h2&gt;

&lt;p&gt;Este é o campo mais moderno e poderoso. Ele funciona como um “roteador” de módulos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JSON

"exports": {
  ".": {
    "types": "./dist/index.d.ts",
    "import": "./dist/index.mjs",
    "require": "./dist/index.js"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;A ordem importa:&lt;/strong&gt; Sempre coloque types primeiro para que o TypeScript reconheça as definições antes de tentar ler o código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encapsulamento:&lt;/strong&gt; O campo exports impede que os usuários acessem arquivos internos da sua biblioteca que não deveriam ser mexidos. Se não estiver no exports, o usuário não consegue importar.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. TypeScript e o campo types
&lt;/h2&gt;

&lt;p&gt;Mesmo que você não tenha escrito sua lib em TypeScript, o arquivo .d.ts é obrigatório para uma boa experiência do desenvolvedor (DX). Sem ele, o usuário não tem o “autocompletar” no VS Code. Ele fica “no escuro” sem saber quais funções sua biblioteca oferece ou quais parâmetros elas recebem.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. O que realmente vai para o NPM? (files)
&lt;/h2&gt;

&lt;p&gt;Por padrão, quando você roda npm publish, o NPM envia quase tudo da sua pasta. Isso é ruim por dois motivos:&lt;/p&gt;

&lt;p&gt;O pacote fica pesado (incluindo testes, arquivos de configuração e código fonte original).&lt;/p&gt;

&lt;p&gt;Expõe sua lógica de desenvolvimento desnecessariamente.&lt;/p&gt;

&lt;p&gt;Use o campo files para criar uma “lista branca”:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
JSON

"files": [
  "dist"
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso diz ao NPM: “Só leve o que estiver na pasta dist”.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Como automatizar tudo isso?
&lt;/h2&gt;

&lt;p&gt;Não tente escrever os arquivos da pasta dist na mão. A dica de ouro é usar o tsup. Ele é um “bundler” que não precisa de configuração.&lt;/p&gt;

&lt;p&gt;Passo a passo rápido:&lt;/p&gt;

&lt;p&gt;Instale: &lt;code&gt;npm install tsup -D&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;No package.json, adicione o script: "build": "tsup src/index.ts --format cjs,esm --dts"&lt;/p&gt;

&lt;p&gt;Ao rodar npm run build, o tsup vai:&lt;/p&gt;

&lt;p&gt;Ler seu arquivo fonte.&lt;/p&gt;

&lt;p&gt;Gerar o .js (CommonJS).&lt;br&gt;
Gerar o .mjs (ES Module).&lt;br&gt;
Gerar o .d.ts (Tipagens).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Configurar o package.json corretamente é a diferença entre uma biblioteca profissional e uma que gera issues no GitHub em 5 minutos. Com essa estrutura, você garante que qualquer desenvolvedor, independente da tecnologia que use, consiga integrar sua solução sem atrito.&lt;/p&gt;

</description>
      <category>npm</category>
      <category>tutorial</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>🚀 O melhor dos dois mundos: Entenda o Partial Pre-Rendering (PPR)</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Mon, 29 Dec 2025 20:00:57 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/o-melhor-dos-dois-mundos-entenda-o-partial-pre-rendering-ppr-295f</link>
      <guid>https://dumb.dev.to/nathdev/o-melhor-dos-dois-mundos-entenda-o-partial-pre-rendering-ppr-295f</guid>
      <description>&lt;p&gt;Você já teve que escolher entre a velocidade de uma página estática e a flexibilidade de um conteúdo dinâmico? Com o Partial Pre-Rendering (PPR), essa escolha ficou no passado.&lt;/p&gt;

&lt;p&gt;💡 O que é o PPR?&lt;br&gt;
Basicamente, o PPR permite que você combine conteúdo estático (que carrega instantaneamente) e conteúdo dinâmico (que depende de dados do usuário ou do banco) na mesma rota, sem sacrificar a performance.&lt;br&gt;
Imagine uma página de produto:&lt;/p&gt;

&lt;p&gt;A casca (Shell): Título, descrição e imagens são pré-renderizados e servidos via CDN (ultra rápido).&lt;/p&gt;

&lt;p&gt;O conteúdo dinâmico: O carrinho de compras e as recomendações personalizadas são "encaixados" assim que ficam prontos.&lt;/p&gt;

&lt;p&gt;🎯 Por que isso importa?&lt;br&gt;
Melhor UX: O usuário vê a página imediatamente, reduzindo o bounce rate.&lt;/p&gt;

&lt;p&gt;SEO: O conteúdo principal está lá para os bots de busca desde o milissegundo zero.&lt;/p&gt;

&lt;p&gt;Simplicidade: Você não precisa mais decidir entre force-static ou force-&lt;br&gt;
dynamic para a página toda. O PPR ainda está em estágio experimental (preview), mas já mostra como será o futuro do desenvolvimento web focado em performance extrema.&lt;/p&gt;

&lt;p&gt;🛠️ Exemplo Prático (Next.js)&lt;br&gt;
Antigamente, se você tivesse um componente dinâmico, a página inteira poderia perder o benefício do cache estático. Com PPR e React Suspense, o código fica assim:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8oslng7m2vqbrkuc3wc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8oslng7m2vqbrkuc3wc.jpg" alt=" " width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>💎 Conhecem o useImmer ?</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 23:04:21 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/conhecem-o-useimmer--1ejk</link>
      <guid>https://dumb.dev.to/nathdev/conhecem-o-useimmer--1ejk</guid>
      <description>&lt;p&gt;O use-immer simplifica a vida no React. Ele permite que você "mute" o estado diretamente em uma função de atualização, e a biblioteca Immer, de forma mágica, garante a imutabilidade por baixo dos panos. Basicamente ele substitui o useState.&lt;/p&gt;

&lt;p&gt;O Problema (Estado Aninhado):&lt;br&gt;
Imagine atualizar a rua dentro de um objeto complexo: usuario.contato.endereco.rua&lt;/p&gt;
&lt;h2&gt;
  
  
  😫 O Jeito "Raiz" (com useState)
&lt;/h2&gt;

&lt;p&gt;Para garantir a imutabilidade, você é obrigado a copiar cada nível do objeto usando ...spread:&lt;/p&gt;

&lt;p&gt;// Usando useState (precisa de muito ...spread)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;setUsuario(prev =&amp;gt; ({
    ...prev, // Cópia Nível 1
    contato: {
       ...prev.contato, // Cópia Nível 2
       endereco: {
          ...prev.contato.endereco, // Cópia Nível 3
          rua: 'Rua B' // Finalmente, a mudança
       }
    }
}));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  😎 O Jeito "que Brilha demais" (com use-immer)
&lt;/h2&gt;

&lt;p&gt;Aqui, você recebe um rascunho (draft) e o trata como se fosse uma variável normal, mutando-o diretamente:&lt;br&gt;
JavaScript&lt;/p&gt;

&lt;p&gt;// Usando use-immer (simples e direto)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;updateUsuario(draft =&amp;gt; {
    // Apenas acesse e mude a propriedade, como em JS puro!
    draft.contato.endereco.rua = 'Rua B';
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🙏 Conclusão: O use-immer elimina o código repetitivo e a chance de erros, tornando a atualização de estados profundos no React muito mais limpa e fácil de ler.&lt;/p&gt;

</description>
      <category>useimmer</category>
      <category>react</category>
    </item>
    <item>
      <title>🚀 Adeus useMemo e useCallback Manuais! A Revolução do React Compiler Chegou</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 23:01:32 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/adeus-usememo-e-usecallback-manuais-a-revolucao-do-react-compiler-chegou-dgj</link>
      <guid>https://dumb.dev.to/nathdev/adeus-usememo-e-usecallback-manuais-a-revolucao-do-react-compiler-chegou-dgj</guid>
      <description>&lt;p&gt;Estou super animada com o novo React Compiler! Para quem trabalha com React, sabe que otimizar re-renders com useMemo, useCallback e React.memo é essencial, mas muitas vezes é repetitivo e fácil de errar.&lt;br&gt;
O React Compiler, lançado no React 19, muda o jogo: ele automatiza a memoização (o equivalente a useMemo/useCallback) durante o build time. O resultado?&lt;/p&gt;

&lt;p&gt;✅ Performance Aprimorada: Otimizações automáticas que reduzem re-renders desnecessários. &lt;br&gt;
✅ Código Mais Limpo: Menos boilerplate de hooks de memoização. &lt;br&gt;
✅ Foco no Desenvolvimento: Podemos nos concentrar mais na lógica de negócios e menos em micro-otimizações de renderização.&lt;/p&gt;

&lt;p&gt;Isso não é apenas código mais limpo; é uma mudança na forma como pensamos a performance no React. O Compiler está aqui para garantir que escrevamos "React puro" e ainda assim tenhamos apps rápidos por padrão!&lt;/p&gt;

&lt;p&gt;Exemplo Prático de Como o Código Fica Mais Limpo:&lt;br&gt;
Antes do Compiler (Obrigatório useCallback)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu75t6n0d47mbog8hgteo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu75t6n0d47mbog8hgteo.jpg" alt=" " width="800" height="751"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💎 Porque string &amp; {} é o truque de UX/DX do TypeScript que você precisa!</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 23:00:21 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/porque-string-e-o-truque-de-uxdx-do-typescript-que-voce-precisa-2i93</link>
      <guid>https://dumb.dev.to/nathdev/porque-string-e-o-truque-de-uxdx-do-typescript-que-voce-precisa-2i93</guid>
      <description>&lt;p&gt;📌 Muitas vezes, queremos um tipo que aceite literais específicos (para sugestão) e qualquer outra string (para flexibilidade).&lt;/p&gt;

&lt;h2&gt;
  
  
  O Problema:
&lt;/h2&gt;

&lt;p&gt;Se você escreve type MyType = 'A' | 'B' | string, o TypeScript é "inteligente demais" e simplifica para apenas string, removendo as sugestões de 'A' e 'B'.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Solução:
&lt;/h2&gt;

&lt;p&gt;Usamos o (string &amp;amp; {}).&lt;br&gt;
Essa interseção com o objeto vazio ({}) impede que o TS colapse a união para apenas string. Ele preserva a lista de literais para o IntelliSense, mantendo a porta aberta para qualquer outra string.&lt;/p&gt;

&lt;p&gt;✨ &lt;em&gt;&lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/em&gt; Você ganha sugestão de código (IntelliSense) para os casos mais comuns, sem abrir mão da flexibilidade total da string. É um ganho enorme para a experiência do desenvolvedor! &lt;/p&gt;

</description>
      <category>typescript</category>
      <category>dica</category>
      <category>string</category>
    </item>
    <item>
      <title>🌟 O que é o eslint-plugin-jsx-a11y?</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 22:56:50 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/o-que-e-o-eslint-plugin-jsx-a11y-31le</link>
      <guid>https://dumb.dev.to/nathdev/o-que-e-o-eslint-plugin-jsx-a11y-31le</guid>
      <description>&lt;p&gt;É um plugin do ESLint que faz uma análise estática do seu código JSX para identificar e aplicar um conjunto de regras de acessibilidade. Ele ajuda a detectar problemas potenciais antes mesmo de o código ser renderizado no navegador.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔑 Por que ele é Importante?
&lt;/h2&gt;

&lt;p&gt;O plugin ajuda a prevenir erros de acessibilidade comuns que podem excluir usuários com deficiência. Ao integrar o a11y ao seu fluxo de linting, você garante:&lt;br&gt;
&lt;strong&gt;_Desenvolvimento Preventivo: _&lt;/strong&gt;Corrige problemas no momento em que está escrevendo o código, o que é muito mais eficiente do que corrigir depois.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Educação Contínua:&lt;/em&gt;&lt;/strong&gt; Ele atua como um guia, ensinando as melhores práticas de acessibilidade para elementos React/JSX.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Conformidade&lt;/em&gt;&lt;/strong&gt;: Ajuda seu código a seguir diretrizes importantes de acessibilidade, como as WCAG (Web Content Accessibility Guidelines).&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Exemplos de Problemas que Ele Detecta
&lt;/h2&gt;

&lt;p&gt;O plugin possui uma grande lista de regras, mas aqui estão alguns dos problemas mais comuns que ele verifica:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;img sem alt:&lt;/em&gt;&lt;/strong&gt; Alerta quando uma imagem não tem o atributo alt (texto alternativo), crucial para leitores de tela.&lt;br&gt;
onClick sem onKeyPress/onKeyDown: Verifica se elementos interativos que usam onClick também podem ser acionados pelo teclado.&lt;br&gt;
Controles de formulário sem label associado: Garante que inputs e outros controles estejam corretamente ligados a um elemento  (usando htmlFor).&lt;br&gt;
U*&lt;em&gt;&lt;em&gt;so incorreto de funções ARIA:&lt;/em&gt;&lt;/em&gt;* Valida a sintaxe e o uso dos atributos aria-&lt;em&gt;.&lt;br&gt;
_&lt;/em&gt;&lt;em&gt;a (links) sem conteúdo visível:&lt;/em&gt;*_ Checa se links têm texto ou uma descrição ARIA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_🤝 Complemento a Outras Ferramentas&lt;br&gt;
_&lt;/strong&gt;É importante notar que o eslint-plugin-jsx-a11y faz uma análise estática do código-fonte (JSX). Ele não testa o HTML final renderizado na página.&lt;br&gt;
Por isso, ele é frequentemente usado em conjunto com ferramentas de teste de acessibilidade em tempo de execução, como:&lt;br&gt;
&lt;em&gt;&lt;strong&gt;react-axe (ou @axe-core/react):&lt;/strong&gt;&lt;/em&gt; Que audita o DOM final.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;jest-axe:&lt;/strong&gt;&lt;/em&gt; Para testes unitários de acessibilidade após a renderização.&lt;/p&gt;

&lt;p&gt;Resumindo: O eslint-plugin-jsx-a11y é a sua primeira linha de defesa para garantir que a acessibilidade seja parte integrante do seu processo de desenvolvimento em React.&lt;/p&gt;

</description>
      <category>acessibilidade</category>
      <category>react</category>
      <category>a11y</category>
    </item>
    <item>
      <title>🔑 O que é useId no React?</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 22:54:51 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/o-que-e-useid-no-react-26p0</link>
      <guid>https://dumb.dev.to/nathdev/o-que-e-useid-no-react-26p0</guid>
      <description>&lt;p&gt;O useId é um Hook do React (disponível a partir da versão 18) que é usado para gerar identificadores únicos e estáveis dentro de um componente. Ele retorna uma string que é garantida ser exclusiva para aquela instância específica do componente.&lt;/p&gt;

&lt;p&gt;🎯 Para que Serve o useId?&lt;br&gt;
O principal objetivo do useId é ajudar na acessibilidade (Accessibility), especialmente para conectar elementos DOM que precisam de um ID único para funcionar corretamente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conexão de Elementos (Acessibilidade)
É o uso mais comum. No HTML, para associar uma label (rótulo) a um campo de formulário (input), você precisa que o atributo htmlFor da label seja igual ao atributo id do input.
Problema: Se você simplesmente codificar o ID, por exemplo, , e esse componente for renderizado várias vezes na mesma página (como em uma lista ou dentro de outros componentes), você terá IDs duplicados, o que é inválido no HTML e prejudica leitores de tela e a acessibilidade.
Solução com useId: O useId gera um ID diferente para cada instância do seu componente, garantindo que a associação entre label e input funcione corretamente em qualquer cenário.
JavaScript
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import { useId } from 'react';

function PasswordField() {
 // Gera um ID único e estável para esta instância
 const passwordId = useId(); 

 return (
   &amp;lt;&amp;gt;
     &amp;lt;label htmlFor={passwordId}&amp;gt;Senha:&amp;lt;/label&amp;gt;
     &amp;lt;input id={passwordId} type="password" /&amp;gt;
   &amp;lt;/&amp;gt;
 );
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Compatibilidade com Server-Side Rendering (SSR)&lt;br&gt;
Este é um grande benefício. O useId garante que o ID gerado seja o mesmo tanto na primeira renderização no servidor quanto na renderização subsequente no cliente (o processo chamado de hidratação).&lt;br&gt;
Isso evita problemas de incompatibilidade (mismatches) que podem ocorrer quando IDs são gerados aleatoriamente ou de forma não determinística, garantindo que o seu HTML seja consistente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outros Atributos ARIA&lt;br&gt;
Ele também é útil para outros atributos de acessibilidade do ARIA (Accessible Rich Internet Applications), como:&lt;br&gt;
aria-labelledby&lt;br&gt;
aria-describedby&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;❌ Quando Não Usar useId?&lt;br&gt;
É importante notar que o useId não deve ser usado para:&lt;br&gt;
Gerar keys para listas: As chaves (keys) em listas (quando se usa .map()) devem ser baseadas nos dados subjacentes (por exemplo, um ID do banco de dados). O useId não garante chaves estáveis no caso de reordenação de listas, o que poderia levar a bugs de estado.&lt;br&gt;
Gerar IDs globalmente únicos (UUIDs): Embora seja único dentro da árvore React, o formato do ID é determinístico para garantir a consistência Server/Client, e não se destina a ser um identificador globalmente aleatório, como um UUID&lt;/p&gt;

</description>
      <category>react</category>
      <category>hook</category>
      <category>useid</category>
    </item>
    <item>
      <title>🚀 O Poder da Teoria dos Conjuntos na Programação: Lodash como Aliado na União e Diferença de Dados</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 22:49:44 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/o-poder-da-teoria-dos-conjuntos-na-programacao-lodash-como-aliado-na-uniao-e-diferenca-de-dados-3cie</link>
      <guid>https://dumb.dev.to/nathdev/o-poder-da-teoria-dos-conjuntos-na-programacao-lodash-como-aliado-na-uniao-e-diferenca-de-dados-3cie</guid>
      <description>&lt;p&gt;No desenvolvimento em JavaScript, a manipulação de coleções de dados (arrays) é uma constante. Adotar uma mentalidade baseada na Teoria dos Conjuntos pode ser um divisor de águas, simplificando nosso código e aumentando sua clareza.&lt;/p&gt;

&lt;p&gt;📖 O Conceito de Conjunto (Set)&lt;br&gt;
Em programação, um Conjunto é essencialmente uma coleção de elementos distintos. As operações de conjuntos, como União e Diferença, nos permitem resolver problemas de gerenciamento de dados de forma elegante:&lt;br&gt;
União: Combina listas, eliminando automaticamente quaisquer duplicatas.&lt;br&gt;
Diferença: Encontra elementos que estão em uma lista, mas não na outra.&lt;/p&gt;

&lt;p&gt;Vamos ver como o Lodash nos ajuda a aplicar isso, na prática, comparando-o com o código JavaScript "puro".&lt;/p&gt;

&lt;p&gt;Exemplo 1: União (Combinando Listas sem Duplicatas)&lt;br&gt;
Imagine que você precisa consolidar uma lista de usuariosAtivos e novosUsuarios.&lt;/p&gt;

&lt;p&gt;Objetivo: Obter uma lista única de todos os usuários.&lt;br&gt;
JavaScript Normal (Manual):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const A = [1, 2, 3];
const B = [3, 4, 5];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;// Usamos o Set nativo para desduplicar&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const uniao = [...new Set([...A, ...B])]; 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;// Resultado: [1, 2, 3, 4, 5]&lt;/p&gt;

&lt;p&gt;Com Lodash (_.union):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const A = [1, 2, 3];
const B = [3, 4, 5];
const uniao = _.union(A, B); 
// Resultado: [1, 2, 3, 4, 5]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Ganho: O Lodash reduz a operação complexa de concatenação e desduplicação a uma única função, tornando a intenção do código imediata. A legibilidade é máxima.&lt;/p&gt;

&lt;p&gt;Exemplo 2: Diferença (Encontrando Exclusividades)&lt;br&gt;
Queremos saber quais usuários estão apenas na Lista A (ativos) e não na Lista B (novos), ou seja, quem é exclusivo de A.&lt;br&gt;
Objetivo: Elementos em A que não estão em B.&lt;/p&gt;

&lt;p&gt;JavaScript Normal (Manual):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const A = [1, 2, 3, 6]; 
const B = [3, 4, 5];
// Usamos filter e includes, com complexidade O(N*M)
const diferenca = A.filter(item =&amp;gt; !B.includes(item)); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;// Resultado: [1, 2, 6]&lt;/p&gt;

&lt;p&gt;Com Lodash (_.difference):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const A = [1, 2, 3, 6]; 
const B = [3, 4, 5];
const diferenca = _.difference(A, B); 
// Resultado: [1, 2, 6]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Ganho: Além da simplicidade sintática, _.difference é frequentemente implementado de forma mais eficiente (utilizando hash maps internamente) do que a solução filter + includes manual, oferecendo melhor performance em grandes conjuntos de dados. Ele transforma uma lógica imperativa (filter) em uma declaração de conjunto (difference).&lt;/p&gt;

&lt;p&gt;🏆 Conclusão: Por Que Mudar a Mentalidade?&lt;br&gt;
Adotar a mentalidade de conjuntos e utilizar utilitários como o Lodash nos permite escrever um código mais declarativo. Em vez de dizer como o código deve ser executado (loops e filtros), dizemos o que queremos que ele faça (_.union, _.difference). Isso resulta em:&lt;br&gt;
💡 Maior Clareza: A função descreve a intenção.&lt;br&gt;
💡Menos Bugs: Utilizamos funções testadas e otimizadas.&lt;br&gt;
💡Melhor Performance: Aproveitamos implementações otimizadas de bibliotecas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4upvvjgm1it5qjvbc45y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4upvvjgm1it5qjvbc45y.jpg" alt=" " width="800" height="553"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3r943crmelb6drmm677.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3r943crmelb6drmm677.jpg" alt=" " width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>lodash</category>
      <category>union</category>
    </item>
    <item>
      <title>🚀 Maximizando a Performance de Tabelas: 4 Estratégias Essenciais no Frontend!</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 22:46:56 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/maximizando-a-performance-de-tabelas-4-estrategias-essenciais-no-frontend-4lf9</link>
      <guid>https://dumb.dev.to/nathdev/maximizando-a-performance-de-tabelas-4-estrategias-essenciais-no-frontend-4lf9</guid>
      <description>&lt;p&gt;Lidar com grandes volumes de dados em aplicações web pode ser um desafio de performance. Ninguém gosta de uma tabela lenta ou travando, certo?&lt;/p&gt;

&lt;p&gt;Aqui estão 4 técnicas fundamentais que todo desenvolvedor deve conhecer para carregar tabelas de forma eficiente e garantir uma excelente experiência do usuário (UX):&lt;/p&gt;

&lt;p&gt;1️⃣ Tabela Virtualizada (Virtualization)&lt;br&gt;
A Virtualização foca na Otimização da Renderização no frontend.&lt;br&gt;
O que faz: Em vez de renderizar todos os elementos da lista ou tabela no DOM, ela renderiza apenas as linhas visíveis na tela (e algumas acima/abaixo para suavizar o scroll).&lt;br&gt;
➡️ Vantagem: Reduz drasticamente o número de nós do DOM. O resultado é um scroll mais suave e alta performance de UI, mesmo com datasets de milhares de itens.&lt;br&gt;
➡️Melhor Uso: Cenários onde o dataset completo está disponível (ou sendo carregado em pedaços grandes), mas a lentidão é causada pela renderização excessiva no navegador.&lt;/p&gt;

&lt;p&gt;2️⃣ Paginação (Pagination)&lt;br&gt;
A Paginação foca na Otimização da Carga de Dados entre o frontend e o backend.&lt;br&gt;
➡️O que faz: Quebra um grande conjunto de dados em pedaços menores (páginas) no servidor.&lt;br&gt;
➡️Vantagem: Quando o usuário solicita uma página, apenas um subconjunto de dados (ex.: 20 linhas) é retornado pela API. Isso reduz a carga de rede e a carga do servidor, pois o banco de dados só busca o necessário.&lt;br&gt;
Melhor Uso: Tabelas com milhões de registros, onde carregar todos os dados de uma vez seria impraticável.&lt;/p&gt;

&lt;p&gt;3️⃣ Tabela em Memória (Client-side Processing)&lt;br&gt;
Esta técnica foca na Velocidade de Interação após o carregamento inicial.&lt;br&gt;
O que faz: O conjunto completo de dados é carregado na memória do navegador.&lt;br&gt;
➡️Vantagem: Permite que operações como filtragem, ordenação e pesquisa sejam executadas instantaneamente no lado do cliente (sem novas requisições à API).&lt;br&gt;
➡️Melhor Uso: Datasets pequenos a médios (ex.: até 5.000 ou 10.000 registros, dependendo da complexidade dos dados), onde o custo de carregar o conjunto completo é aceitável em troca de interatividade imediata.&lt;/p&gt;

&lt;p&gt;4️⃣ React Query (ou TanStack Query)&lt;br&gt;
React Query é uma ferramenta essencial que suporta todas as técnicas acima.&lt;br&gt;
O que é: É uma biblioteca de gerenciamento de estado de servidor (não de estado de UI), lidando com fetching, caching, sincronização e atualização de dados remotos.&lt;br&gt;
➡️Relevância para Tabelas:&lt;br&gt;
Facilita a implementação de paginação (mantendo o cache de páginas anteriores).&lt;br&gt;
➡️Fornece os dados brutos de forma eficiente para a virtualização.&lt;br&gt;
Lida com status de requisição (loading, error), tornando o código mais limpo e robusto&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>react</category>
      <category>tabelas</category>
    </item>
    <item>
      <title>🌞 Dominando padrões de composição em React para código mais limpo e reuso de lógica!</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 22:44:39 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/dominando-padroes-de-composicao-em-react-para-codigo-mais-limpo-e-reuso-de-logica-3enm</link>
      <guid>https://dumb.dev.to/nathdev/dominando-padroes-de-composicao-em-react-para-codigo-mais-limpo-e-reuso-de-logica-3enm</guid>
      <description>&lt;p&gt;Recentemente, apliquei o padrão Higher-Order Component (HOC) para desacoplar a lógica de autenticação da renderização dos componentes.&lt;/p&gt;

&lt;p&gt;🚀 O que isso resolve?&lt;br&gt;
Com um HOC como o &lt;code&gt;withAuth&lt;/code&gt;, conseguimos centralizar a regra de segurança em um único lugar. Qualquer componente que precise de autenticação é simplesmente "envolvido" pelo HOC, que decide se o usuário tem permissão para acessar o conteúdo.&lt;/p&gt;

&lt;p&gt;➡️ Exemplo Prático - Proteção de Componentes:&lt;/p&gt;

&lt;p&gt;// O HOC injeta a lógica de autenticação/redirecionamento&lt;br&gt;
&lt;code&gt;export default withAuth(UserDashboard);&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
💡 Essa técnica não só protege rotas de forma declarativa, como também elimina a duplicação de código de verificação de usuário em dezenas de componentes. Um passo crucial para a construção de aplicações React escaláveis e de alta manutenção.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1e7655etsy9jfij48ur9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1e7655etsy9jfij48ur9.jpg" alt=" " width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevz47swm3pon1sgkkbe6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevz47swm3pon1sgkkbe6.jpg" alt=" " width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>🧠 Otimização no React: O Que, Quando e Por Quê</title>
      <dc:creator>Nathana Facion</dc:creator>
      <pubDate>Sat, 27 Dec 2025 22:42:59 +0000</pubDate>
      <link>https://dumb.dev.to/nathdev/otimizacao-no-react-o-que-quando-e-por-que-2804</link>
      <guid>https://dumb.dev.to/nathdev/otimizacao-no-react-o-que-quando-e-por-que-2804</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;React.memo (Memoriza um Componente)&lt;br&gt;
💡 O que faz: Envolve um componente funcional. Se as props do componente filho forem as mesmas da renderização anterior, o React pula completamente a re-renderização desse componente. É o "porteiro" do componente.&lt;br&gt;
🏆 Quando usar: Quando você tem um componente que é lento e re-renderiza frequentemente sem que suas props realmente mudem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;useMemo (Memoriza um Valor)&lt;br&gt;
💡 O que faz: Memoriza o resultado (o valor) de uma função de cálculo. O cálculo só é refeito se as variáveis listadas no seu array de dependências mudarem.&lt;br&gt;
🏆 Quando usar: Quando você tem um cálculo pesado ou complexo (ex: filtros, somas grandes, ordenação) dentro do seu componente, e quer evitar que ele seja re-executado em toda renderização.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;useCallback (Memoriza uma Função)&lt;br&gt;
💡 O que faz: Memoriza a referência da função em si. Evita que o JavaScript crie uma nova função em um endereço de memória diferente a cada renderização.&lt;br&gt;
🏆 Quando usar: Quase exclusivamente quando você precisa passar uma função como prop para um componente filho otimizado com React.memo. Ele garante que o filho não re-renderize desnecessariamente, pois a prop (a função) mantém a mesma referência&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>otimizacao</category>
      <category>react</category>
      <category>usememo</category>
      <category>usecallback</category>
    </item>
  </channel>
</rss>
