React browser(): o limite do SSR precisa ser explícito e testado
A API browser() explicita execução apenas no cliente, mas a referência citada ainda aponta Canary. Teste canal, Suspense e hidratação antes de adotá-la.
A InfoQ apresenta a API browser(), de react-dom, no contexto do React 19.3, publicado no npm em 9 de setembro de 2026.[9] A própria reportagem ressalva que a referência de use() ainda identifica browser() como disponível apenas no canal Canary.[9]
Essa diferença é o primeiro requisito de engenharia: não transformar uma notícia sobre uma versão em garantia de que uma API existe no pacote estável do projeto. Depois vem a decisão arquitetural sobre qual parte da interface realmente deve esperar pelo navegador.
O que muda para quem desenvolve
O mecanismo descrito consiste em passar browser() a use().[9] No servidor, o componente suspende e deixa no HTML o fallback da fronteira Suspense mais próxima; no navegador, a chamada retorna undefined e a renderização continua após a hidratação.[9] É necessário usar um Client Component com uma fronteira Suspense, pois a renderização no servidor falha sem ela.[9]
Minha leitura é que a API torna visível uma escolha que poderia ficar escondida em flags de montagem. Isso ajuda a discutir o custo dessa escolha: qual conteúdo chega no HTML inicial, o que o usuário vê enquanto espera e qual dependência impede a renderização no servidor.
O artigo também descreve onBrowserBailout e uma razão opcional para observar onde e por que o SSR foi abandonado.[9] Instrumentação desse tipo deveria servir para revisar decisões, não para normalizar o abandono de SSR em qualquer dificuldade.
Como aplicar
Comece pelo inventário dos componentes que leem armazenamento local, objetos do navegador ou informações do dispositivo durante a renderização. Para cada um, pergunte se a dependência pode ser recebida como dado inicial ou se precisa mesmo ser consultada no cliente.
Monte um piloto com um componente isolado, como uma preferência visual armazenada no dispositivo. Confira os pacotes instalados e o canal de lançamento antes de usar a API. Depois, inspecione o HTML entregue pelo servidor, o fallback e a primeira renderização do cliente.
Teste carregamento lento, indisponibilidade do armazenamento e ausência de JavaScript. O critério de aceite pode exigir que o conteúdo essencial continue acessível e que a substituição do fallback não provoque uma mudança visual desnecessária. Observe também erros de hidratação e tempo até a interação.
Não desligue SSR da página inteira para resolver um detalhe de preferência. Compare a alternativa restrita ao componente com o envio de dados iniciais e com o mecanismo já suportado pelo framework utilizado.
Cuidados e limites
A decisão pode ser condicional: o artigo descreve renderização no servidor quando há dados iniciais e adiamento quando eles faltam.[9] Isso permite um desenho mais preciso, mas aumenta os caminhos que precisam de teste.
A reportagem compara a proposta com mecanismos exclusivos de frameworks, porém mantém a ressalva de disponibilidade por canal.[9] Não atribua estabilidade a browser() apenas por atualizar para 19.3.
Adiar execução não resolve automaticamente segurança, acessibilidade ou experiência de carregamento. O objetivo deve ser delimitar a dependência do navegador e demonstrar que a interface continua útil enquanto ela não pode ser atendida.
Fonte
[9] Fonte: InfoQ