Hoje estamos animados em anunciar o lançamento do React Native 0.80!
Esta versão traz a versão do React que enviamos junto com o React Native para a mais recente disponível: 19.1.0.
Também estamos enviando uma série de melhorias na estabilidade da nossa API JS: importações profundas agora disparam um aviso e oferecemos uma nova API Strict TypeScript opt-in que fornece tipos mais precisos e seguros para usar.
Além disso, a Arquitetura Legacy do React Native é oficialmente congelada, e você começará a ver avisos para APIs que deixarão de funcionar quando desativarmos completamente a Arquitetura Legacy.
Destaque
Destaque
Depreciação de importações profundas do JavaScript
Nesta versão, estamos fazendo movimentos para melhorar e estabilizar a API pública JavaScript do React Native. O primeiro passo nessa direção é um escopo melhorado das APIs que podem ser importadas por aplicativos e frameworks. Em linha com isso, estamos formalmente deprecando as importações profundas do React Native (veja RFC), e introduzimos avisos via ESLint e o console JS.
Esses avisos estão limitados a importações dentro do código-fonte do seu projeto, e podem ser optados fora. No entanto, por favor tenha em mente que pretendemos remover as importações profundas da API do React Native em uma versão futura, e esses devem ser atualizados para a importação raiz.
import {Alert} from 'react-native/Libraries/Alert/Alert';
import {Alert} from 'react-native'
Alguns APIs não são exportados na raiz, e ficarão indisponíveis sem importações profundas. Isso é intencional, para reduzir a superfície total da API do React Native. Temos um tópico de feedback aberto para problemas dos usuários, e estaremos trabalhando com a comunidade para finalizar quais APIs exportamos (pelo menos) nas próximas duas versões do React Native. Por favor compartilhe seu feedback!
Saiba mais sobre esta mudança no nosso post dedicado: Avançando em direção a uma API JavaScript estável.
Opt-in Strict TypeScript API
Com a redefinição acima das exportações em nossa API pública, estamos enviando um novo conjunto de tipos do TypeScript para o pacote react-native na versão 0.80, que chamamos de Strict TypeScript API.
A opção por entrar na Strict TypeScript API é uma prévia da futura API JavaScript estável do React Native. Esses novos tipos são:
- Gerados diretamente a partir do nosso código-fonte — melhorando a cobertura e a precisão, então você pode esperar garantias mais fortes de compatibilidade.
- Limitado ao arquivo index do React Native — definindo nossa API pública com mais rigor, o que significa que não quebraremos a API quando fizermos alterações internas nos arquivos.
Nós estamos enviando esses tipos junto com nossos tipos existentes, então você pode escolher migrar quando estiver pronto. Além disso, se você está usando APIs padrão do React Native, muitos aplicativos devem validar sem nenhuma alteração. Encorajamos fortemente os adotantes antecipados e novos aplicativos criados a optarem por meio de seu arquivo tsconfig.json.
Quando a comunidade estiver pronta, a Strict TypeScript API se tornará nossa API padrão no futuro — sincronizada com a remoção de importações profundas.
Saiba mais sobre essa mudança em nosso post dedicado: Migrando para uma API JavaScript estável.
Legacy Architecture Freezing & Warnings
A Nova Arquitetura do React Native é a escolha padrão desde a versão 0.76 e temos lido histórias de sucesso de projetos e ferramentas que beneficiam muito dela.
Recentemente compartilhamos que agora consideramos a Arquitetura Legada como congelada. Não desenvolveremos novas correções de bugs ou recursos na Arquitetura Legada mais e vamos parar de testá-la enquanto trabalharmos em uma versão.
No entanto, para suavizar a migração, ainda estamos permitindo que os usuários optem fora da Nova Arquitetura se estiverem enfrentando bugs ou regressões.
Entretanto, enviar duas arquiteturas com o React Native é um grande desafio, o que impacta o desempenho em tempo de execução, o tamanho do aplicativo e a manutenção da nossa base de código.
Por isso, eventualmente teremos que encerrar a Arquitetura Legada em algum momento no futuro.
No 0.80, adicionamos uma série de avisos que aparecerão nos React Native DevTools para alertá-lo se você estiver usando APIs que não funcionarão na Nova Arquitetura.
Recomendamos que você não ignore esses avisos e considere migrar seus aplicativos & bibliotecas para a Nova Arquitetura para estar preparado para o futuro.

Você pode aprender mais sobre essas mudanças na palestra "Life After Legacy: The New Architecture Future" que recentemente apresentamos no App.js.
React 19.1.0
Esta versão do React Native é enviada com o React mais recente e estável: 19.1.0
Você pode ler sobre todas as novas funcionalidades e correções de bugs introduzidas no React 19.1.0 na descrição da versão.
Um recurso notável do React 19.1.0 é a implementação e melhorias das pilhas de proprietários. Esta é uma funcionalidade apenas para desenvolvimento que deve ajudá-lo a identificar qual componente está responsável por um determinado erro.
No entanto, sabemos que as pilhas de proprietários não estão funcionando conforme o esperado no React Native se você usar o plugin Babel @babel/plugin-transform-function-name, que é habilitado por padrão no preset Babel do React Native. Vamos enviar uma correção para isso em um futuro lançamento do React Native.
Experimental - Dependências do React Native iOS agora são pré-compiladas
Se você está construindo um aplicativo React Native iOS, provavelmente notou que a primeira compilação nativa leva algum tempo: alguns minutos ou até mais em máquinas mais antigas. Isso acontece porque precisamos compilar todo o código do React Native iOS e todas as suas dependências.
No último mês, temos experimentado com pré-compilação de algumas das partes essenciais do React Native para iOS, similar ao que ocorre no Android, para reduzir o tempo de build quando você estiver executando um aplicativo React Native pela primeira vez.
O React Native 0.80 é a primeira versão que pode enviar parte do React Native para iOS como pré-compilação para ajudar a reduzir os tempos de build.
No processo de lançamento do React Native, estamos produzindo um XCFramework chamado ReactNativeDependencies.xcframework, que é uma versão pré-compilada apenas das dependências de terceiros que o React Native depende.
Nosso experimento e benchmark mostraram quanto tempo essa primeira pré-compilação para iOS está economizando, e em nossas benchmarks, executadas em um M4 machine, as builds do iOS são aproximadamente 12% mais rápidas com a pré-compilação do que ao construir a partir da fonte.
Ao nosso conhecimento, também observamos que várias relações de problemas dos usuários são causadas por erros de build relacionados às dependências de terceiros do React Native (exemplo #39568).
A pré-compilação das dependências de terceiros nos permite construí-las para você, então você não enfrentará mais esses erros de build.
Note que nós não estamos pré-compilando todo o React Native: apenas as bibliotecas que a Meta não controla diretamente, como Folly e GLog.
Em uma futura versão, também enviaremos o restante do núcleo do React Native como uma pré-compilação.
Como usá-los
Esta funcionalidade ainda é experimental, então não está ativada por padrão.
Se você quiser usá-la, pode instalar seus pods adicionando a variável de ambiente RCT_USE_RN_DEP:
RCT_USE_RN_DEP=1 bundle exec pod install
Alternativamente, se você quiser habilitar para todos os desenvolvedores trabalhando nisso, pode modificar seu Podfile assim:
if linkage != nil
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
use_frameworks! :linkage => linkage.to_sym
end
+ENV['RCT_USE_RN_DEP'] = '1'
target 'HelloWorld' do
config = use_native_modules!
Por favor, reporte qualquer problema que as pré-construções possam causar a você e ao seu aplicativo em esta discussão. Estamos comprometidos em investigá-los e garantir que o uso da camada seja transparente para seu aplicativo.
Outras Mudanças
Android - Tamanho menor do APK devido ao IPO
Esta versão traz uma redução significativa no tamanho para todos os aplicativos Android construídos com React Native. A partir da versão 0.80, ativamos Otimização Interprocional (IPO) tanto para builds do React Native quanto do Hermes.
Isto resultou em uma economia de cerca de 1Mb para todos os aplicativos Android.

Você obterá essa economia de tamanho atualizando sua versão do React Native para 0.80 e não há alterações adicionais necessárias no seu projeto.
Nova Revisão da Tela de Aplicativo
Se você não está usando o Expo, mas está usando a CLI e o Template Comunitário, nesta versão movemos a Tela de Novo Aplicativo para seu próprio pacote e demos uma nova pintura. Isso reduz o código inicial quando você cria um novo aplicativo com o Template Comunitário, e também fornece uma melhor experiência ao visualizar em telas maiores.

React Native 0.80 é a última versão do React Native a oferecer suporte oficial ao JSC (JavaScriptCore). O suporte para o JSC será fornecido via o pacote mantido pela comunidade @react-native-community/javascriptcore.
Caso tenha perdido o anúncio, você pode ler mais sobre isso aqui
Quebras de Compatibilidade
Adicionado campo "exports" no principal pacote
Como parte das mudanças na API JS estável, introduzimos um "exports" campo no manifesto package.json do react-native.
No 0.80, essa mapeação continua a expor todas as subpastas JavaScript por padrão e, portanto, não deve ser uma quebra de compatibilidade major. No entanto, isso pode afetar sutileza como os módulos dentro do pacote react-native são resolvidos:
- Com Metro, extensões específicas da plataforma não serão automaticamente expandidas contra correspondências de
"exports". Fornecemos vários módulos shim para acomodar isso (#50426). - No Jest, a capacidade de mockar importações profundas pode ser alterada, o que pode exigir atualizar testes.
Outras Quebras de Compatibilidade
Esta lista contém uma série de outras quebras de compatibilidade que suspeitamos poderem ter um impacto mínimo em seu código de produto e são dignas de nota:
- Nós atualizamos
eslint-plugin-react-hooksda versão 4.6.0 para a versão 5.2.0 (confira o changelog completo aqui). As regras de lint doreact-hookspodem gerar novos sinais de erro que você precisará corrigir ou suprimir.
Android
- Nesta versão, atualizamos a versão do Kotlin embarcado no React Native para 2.1.20. O Kotlin 2.1 introduz novas funcionalidades de linguagem em preview que você pode começar a usar nos seus módulos/componentes. Você pode ler mais sobre isso nas notas oficiais de lançamento.
- Removemos a classe
StandardCharsets. Ela estava obsoleta desde a versão 0.73. Você deve usar a classejava.nio.charset.StandardCharsetsem vez disso. - Tornamos várias classes internas. Essas classes não fazem parte da API pública e não devem ser acessadas. Já notificamos ou submetemos patches para as bibliotecas afetadas:
com.facebook.react.fabric.StateWrapperImplcom.facebook.react.modules.core.ChoreographerCompatcom.facebook.react.modules.common.ModuleDataCleaner
- Migramos várias classes de Java para Kotlin. Se você está usando essas classes, a nulabilidade e os tipos de alguns parâmetros mudaram, então talvez seja necessário ajustar seu código:
- Todas as classes dentro
com.facebook.react.devsupport com.facebook.react.bridge.ColorPropConvertercom.facebook.react.views.textinput.ReactEditTextcom.facebook.react.views.textinput.ReactTextInputManager
- Todas as classes dentro
iOS
- Removemos o campo
RCTFloorPixelValuede RCTUtils.h - O métodoRCTFloorPixelValuenão era usado no React Native e foi removido completamente.
Mudanças quebradoras menores adicionais são listadas no CHANGELOG para 0.80.
Agradecimentos
O React Native 0.80 contém mais de 1167 commits de 127 contribuidores. Obrigado pelo seu trabalho duro!
Queremos enviar um agradecimento especial para esses membros da comunidade que entregaram contribuições significativas nesta versão:
Ainda queremos agradecer os autores adicionais que trabalharam na documentação de recursos neste post:
- Riccardo Cipolleschi por escrever a parte relacionada às pré-construções iOS para Dependências do React Native.
- Alex Hunt pela depreciação de imports profundos, opt-in Strict TypeScript API e redesign da nova tela App.
- Nicola Corti pelo congelamento da Arquitetura Legacy & Avisos.
Atualização para 0.80
Por favor, use o React Native Upgrade Helper para visualizar as alterações de código entre versões do React Native em projetos existentes, além das documentações de atualização.
Para criar um novo projeto:
Se você usa o Expo, o React Native 0.80 será suportado em uma versão canária do SDK do Expo. Instruções sobre como usar o React Native 0.80 no Expo também estão disponíveis em um post dedicado.
0.80 é agora a versão mais recente e estável do React Native e 0.77.x passa para não suportado. Para mais informações, consulte a política de suporte do React Native. Planejamos publicar uma atualização final de fim de vida do 0.77 em breve.

