0Pricing
React Academy · Aula

Compartilhando estado e roteamento entre remotos

Compartilhe uma única instância do React Router e uma loja Zustand entre microfrontends implantados de forma independente.

Compartilhando estado e roteamento entre remotos é 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.

O desafio do compartilhamento de estado

Cada aplicação remota do Module Federation é compilada e implantada de forma independente. Seu estado (React useState, Contexto e lojas Zustand) fica no próprio escopo do módulo JavaScript. A aplicação principal e as aplicações remotas não compartilham o estado automaticamente — você precisa projetar esse compartilhamento de forma explícita.

Opção 1: a URL como estado compartilhado

O mecanismo mais simples de compartilhamento de estado é a URL: qualquer aplicação remota pode ler parâmetros da URL, cadeias de consulta e valores de hash sem nenhuma comunicação entre aplicações remotas. Isso funciona bem para o estado da navegação principal, valores de filtros e qualquer estado que deva poder ser salvo nos favoritos e compartilhado por meio de um link.

Opção 2: CustomEvents para baixo acoplamento

CustomEvents, por meio do EventTarget do navegador, permitem que as aplicações remotas se comuniquem sem importações diretas. Uma aplicação remota executa window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), e qualquer outro módulo (a aplicação principal ou outra aplicação remota) escuta usando window.addEventListener('cart:updated', handler). Não é necessário um módulo compartilhado.

Opção 3: uma aplicação remota de estado compartilhado

Crie uma aplicação remota de estado dedicada que exponha uma loja Zustand ou Jotai. Tanto a aplicação principal quanto as outras aplicações remotas importam dessa aplicação remota de estado e obtêm a mesma instância da loja, pois ela é uma instância única compartilhada. Essa abordagem é poderosa para estados compartilhados complexos (autenticação, carrinho e preferências do usuário), mas acrescenta uma dependência de implantação.

Opção 4: a aplicação principal controla o estado e passa funções de retorno

A aplicação principal controla todo o estado compartilhado e o transmite às aplicações remotas como propriedades ou por meio do Contexto. As aplicações remotas recebem funções de retorno, como onCartUpdate, e navegam usando propriedades. Isso mantém o estado centralizado na aplicação principal, mas exige que ela conheça as APIs das aplicações remotas, criando um acoplamento rígido.

React Router no Module Federation

O histórico e o estado da localização do React Router são fornecidos por um componente de roteamento (BrowserRouter ou createBrowserRouter). Deve haver exatamente um componente de roteamento em uma configuração do Module Federation — colocá-lo em cada aplicação remota criaria vários contextos de roteamento concorrentes, causando conflitos de navegação.

A aplicação principal controla o roteamento

A regra arquitetural é: a aplicação principal fornece o componente de roteamento. As aplicações remotas recebem propriedades de roteamento da aplicação principal (ou leem diretamente da URL). Uma aplicação remota nunca deve criar seu próprio BrowserRouter — isso entraria em conflito com o componente de roteamento da aplicação principal e interromperia a navegação de toda a aplicação.

Compartilhamento do Contexto entre aplicações remotas

Os valores do Contexto do React estão vinculados a uma instância específica do React e a um objeto de Contexto específico. Para que um Contexto funcione entre a aplicação principal e uma aplicação remota, ambas precisam importar o mesmo objeto de Contexto da mesma origem — normalmente da aplicação remota de estado compartilhado ou de um pacote compartilhado de utilitários. A instância única do React garante que o mesmo Contexto funcione em todas as aplicações remotas.

Padrão de arquitetura da aplicação principal

Em uma arquitetura limpa do Module Federation, a aplicação principal controla: a estrutura HTML principal, o provedor de roteamento, o contexto de autenticação, o provedor de tema e tokens visuais e a navegação global. As aplicações remotas controlam o conteúdo de seus próprios domínios funcionais. A aplicação principal reúne as aplicações remotas no layout sem conhecer os detalhes de sua implementação.

Evitando o acoplamento rígido

O maior padrão inadequado do Module Federation é o acoplamento rígido entre a aplicação principal e as aplicações remotas: a aplicação principal importa tipos da aplicação remota, a aplicação remota importa componentes da aplicação principal ou ambas compartilham um pacote npm comum que precisa ser atualizado simultaneamente. Esses acoplamentos anulam o propósito da implantação independente.

Contratos de comunicação

Defina contratos explícitos entre a aplicação principal e as aplicações remotas: as propriedades aceitas por um componente remoto, os CustomEvents que ele dispara e os parâmetros da URL que ele lê. Documente esses contratos como interfaces do TypeScript em um pacote compartilhado de tipos. Isso permite que as equipes evoluam de forma independente dentro do contrato acordado.

Posicionamento do React Router no Module Federation

Onde o provedor do React Router (BrowserRouter) deve ser colocado em uma arquitetura do Module Federation?

Resumo da lição

O compartilhamento de estado entre aplicações remotas do Module Federation pode usar estado na URL (a opção mais simples), CustomEvents (baixo acoplamento), uma aplicação remota de estado compartilhado (loja centralizada) ou estado controlado pela aplicação principal e passado como propriedades. A aplicação principal deve controlar o único provedor de roteamento — as aplicações remotas nunca devem criar o próprio. Contratos claros de comunicação por meio de interfaces do TypeScript mantêm as equipes desacopladas e possibilitam uma verdadeira implantação independente.

Perguntas Frequentes

A aula “Compartilhando estado e roteamento entre remotos” é grátis?

Sim — o texto completo de “Compartilhando estado e roteamento entre remotos” é 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 “Compartilhando estado e roteamento entre remotos”?

Compartilhe uma única instância do React Router e uma loja Zustand entre microfrontends implantados de forma independente. 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 “Compartilhando estado e roteamento entre remotos”?

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

  1. Federação de módulos: importações dinâmicas em tempo de execução
  2. Configurando aplicações React hospedeira e remotas
  3. Compartilhando estado e roteamento entre remotos
  4. Versionamento, implantação e orquestração
← Voltar para React Academy