DEV Community

Cover image for React Native 0.80 Oficial: Saiu! O Que Mudou de Verdade?
Aroldo Goulart
Aroldo Goulart

Posted on

React Native 0.80 Oficial: Saiu! O Que Mudou de Verdade?

TL;DR 📌

Atualização React 19.1.0 traz suporte a gradientes radiais, builds iOS mais rápidos, APKs Android menores, fim da arquitetura legada, novos avisos para deep imports, TypeScript estrito opt-in, descontinuação oficial do JSC, mudanças críticas com Kotlin 2.1.20 e ESLint, além de dependências iOS pré-compiladas.

E aí, galera dev! 👋 Finalmente saiu a versão oficial do React Native 0.80! Depois de acompanharmos os RCs, agora temos a versão estável com todas as novidades confirmadas. Vamos ver o que realmente entrou, o que mudou desde os RCs e o que você precisa saber antes de atualizar seus projetos.

Grandes Novidades Confirmadas! 🚀

React 19.1.0 Chegou!

A versão final do RN 0.80 vem com o React 19.1.0 fresquinho (0e11e6a28b)! Isso traz melhorias como "owner stacks" para ajudar a identificar qual componente causou um erro específico (embora tenha um bug conhecido se você usar o plugin @babel/plugin-transform-function-name).

Chega de Deep Imports! 🚫

Aqueles imports profundos tipo import {Alert} from 'react-native/Libraries/Alert/Alert' agora estão oficialmente deprecados (319ba0afd2, 9fc2a9b9e6). O ESLint e o console JS vão te avisar quando você fizer isso (87809d9326). A ideia é que no futuro você só use imports diretos da raiz:

// Antes - import profundo
import {Alert} from 'react-native/Libraries/Alert/Alert';

// Agora - import da raiz
import {Alert} from 'react-native';
Enter fullscreen mode Exit fullscreen mode

Algumas APIs não estão disponíveis na raiz e vão sumir mesmo. Isso é intencional pra reduzir a superfície da API do React Native.

API TypeScript Estrita (Opcional) 🧐

Tem uma nova opção de tipos TypeScript mais precisos e seguros (6ea24f7bb9)! Esses tipos são:

  • Gerados diretamente do código-fonte (mais precisos)
  • Restritos ao arquivo index do React Native (definindo melhor a API pública)

É opt-in por enquanto, então você pode migrar quando estiver pronto. Se você usa APIs padrão, provavelmente nem vai precisar mudar nada.

Arquitetura Legacy Oficialmente Congelada ❄️

A New Architecture é o padrão desde a versão 0.76, e agora a Legacy Architecture está oficialmente congelada. Isso significa:

  • Sem novos bugfixes ou features na Legacy Architecture
  • Sem testes na Legacy Architecture durante o desenvolvimento de novas versões
  • Avisos no DevTools para APIs que não funcionarão na New Architecture (706b6e878d)

Você ainda pode optar por usar a Legacy Architecture, mas ela será removida no futuro.

Dependências iOS Pré-compiladas (Experimental) ⚡

Cansado de esperar o primeiro build iOS? Agora tem uma opção experimental para usar dependências pré-compiladas que reduzem o tempo de build inicial em ~12%! Para usar, basta:

RCT_USE_RN_DEP=1 bundle exec pod install
Enter fullscreen mode Exit fullscreen mode

Ou adicionar no seu Podfile:

ENV['RCT_USE_RN_DEP'] = '1'
Enter fullscreen mode Exit fullscreen mode

APKs Android Mais Enxutos 📦

Graças à Otimização Interprocedural (IPO) habilitada para React Native (f107c28d2f) e Hermes (2da062f9d1), os APKs Android ficaram ~1MB menores! E você não precisa fazer nada além de atualizar para a versão 0.80.

Redesign da New App Screen 🎨

A tela inicial do template foi movida para seu próprio pacote (3cf0102007) e ganhou um visual novo. Isso reduz o boilerplate inicial e melhora a experiência em telas maiores.

Última Versão com Suporte Oficial ao JSC ⚠️

Esta é a última versão do React Native com suporte oficial ao JavaScriptCore. No futuro, o suporte será oferecido via pacote comunitário @react-native-community/javascriptcore.

O Que Mudou Desde os RCs? 🔄

Campo "exports" no package.json

Foi adicionado o campo "exports" no package.json do react-native para preparar a API JavaScript estável. Por enquanto, ele ainda expõe todos os subpaths por padrão, mas isso pode afetar como os módulos são resolvidos:

  • No Metro, extensões específicas de plataforma não serão expandidas automaticamente
  • No Jest, a capacidade de mockar imports profundos pode ser alterada

Kotlin 2.1.20

A versão do Kotlin foi atualizada para 2.1.20, trazendo novos recursos de linguagem em preview que você pode começar a usar nos seus módulos/componentes.

Mais Classes Internas e Migrações para Kotlin

Várias classes foram marcadas como internas no Android, incluindo StateWrapperImpl (9f941c50c9), ChoreographerCompat (f8b2956437) e ModuleDataCleaner (6fa1864d52). Além disso, mais classes foram migradas de Java para Kotlin, incluindo todo o pacote com.facebook.react.devsupport (9da485b54c).

Breaking Changes que Você Precisa Saber 💥

JavaScript

  • ESLint Plugin React Hooks atualizado de v4.6.0 para v5.2.0 (4de592756b), podendo gerar novos erros de lint
  • Nomes de componentes não podem mais começar com _ (underline)

Android

  • StandardCharsets foi removida (40b38d0a44) (use java.nio.charset.StandardCharsets)
  • Classes como ReactEditText (cac27d15be), NetworkModule (8726e26348), ReactTextInputManager (ab47834eb1) foram convertidas para Kotlin
  • Várias classes foram marcadas como internas e não devem ser acessadas diretamente

iOS

  • RCTFloorPixelValue foi removido de RCTUtils.h (dc97df10a2)
  • Helpers de configuração BridgeModuleBatchDidComplete foram deletados (cbad8aafa5)

Novidades Extras Confirmadas 🌟

Gradientes Radiais

Finalmente temos suporte nativo a gradientes radiais (1b45dc8033, a2409941c2, d7533dce1c)!

Mais Cores no CSS

Suporte para notação hwb() (692b05e77d) e alpha no rgb() tipo rgb(R G B / A) (7441127040).

URLSearchParams Nativo

Implementação nativa de URLSearchParams (af1f1e4fe5) para manipular query strings sem precisar de libs extras.

Acessibilidade Melhorada

Nova prop accessibilityOrder para Android e iOS (8cf4d5b531), além de screenReaderFocusable para Android (4ce093154d) e accessibilityRespondsToUserInteraction para iOS (fd8a3456ca).

Pressable com onPressMove

Agora o componente Pressable expõe a prop onPressMove (6df938c72e) para mais controle durante interações de toque.

Como Atualizar? 🛠️

Use o React Native Upgrade Helper para ver as mudanças de código entre versões e siga a documentação oficial de upgrade.

Se você usa Expo, o React Native 0.80 será suportado em uma versão canary do Expo SDK.

Resumindo... 🎯

O React Native 0.80 traz o React 19.1, estabiliza a API JavaScript, congela oficialmente a Legacy Architecture, reduz o tamanho dos APKs Android e o tempo de build iOS. É uma versão focada em estabilidade, performance e preparação para o futuro sem a Legacy Architecture.

Agora é hora de atualizar seus projetos e aproveitar todas essas melhorias! Bom código! 🚀

Top comments (0)