DEV Community

Aroldo Goulart
Aroldo Goulart

Posted on

React Native v0.80.0-rc em Foco: O Que Mudou e Vale a Pena Saber

E aí, galera dev! 👋
O React Native 0.80 tá batendo na porta com suas versões Release Candidate (RC).
Bora dar uma olhada no que tem de novo, o que foi consertado e o que pode precisar de um carinho extra nos seus projetos?

Agora com os commits pra quem gosta de fuçar! 😉

Atenção Aqui! 🚨 (Breaking Changes)

Sempre tem aquelas mudanças que podem quebrar alguma coisa, né? Fica de olho nessas:

  • Tela de Boas-Vindas Renovada: A NewAppScreen (aquela tela padrão) foi redesenhada e movida para react-native/new-app-screen (3cf0102007).
  • Imports Mais Restritos: Com a introdução do "exports" no package.json (319ba0afd2, 9fc2a9b9e6), imports de pastas internas (tipo react-native/Libraries/...) podem dar ruim. Use os caminhos oficiais! Importar direto de react-native/virtualized-lists também não rola mais (be8393c41b).
  • Nomes de Componentes: Regra nova do ESLint (via eslint-plugin-react-hooks v5.2.0): nomes de componentes não podem mais começar com _ (4de592756b).
  • Para a Galera do Android: Muita coisa virou Kotlin! 🤖 Se você estendia classes como ReactEditText (cac27d15be), NetworkModule (8726e26348), ReactTextInputManager (ab47834eb1), DevSupportManagerBase (9da485b54c), ou ReactInstanceDevHelper (09492075e8), pode precisar ajustar assinaturas. Classes como ModuleDataCleaner (6fa1864d52) e DeviceInfoModule (f02607badb) ficaram internas. ChoreographerCompat (f8b2956437) e StandardCharsets (40b38d0a44) foram deletadas. A função loadSplitBundleFromServer foi removida da interface DevSupportManager (86cd31eb6b).
  • Para a Galera do iOS: Helpers de configuração BridgeModuleBatchDidComplete foram deletados (cbad8aafa5).

Brinquedos Novos na Caixa! 🎁 (Novidades)

Sempre bom ter coisa nova pra brincar, né?

  • TypeScript Mais Rigoroso (Opcional): Chegou o react-native-strict-api (6ea24f7bb9). Ative para mais checagens!
  • <Image> Mais Flexível: Suporte a headers crossOrigin e referralPolicy direto na source.uri (49ea9d80b8).
  • Gradientes Radiais: Finalmente! ✨ (1b45dc8033).
  • Mais Cores no CSS: Suporte pra notação hwb() (692b05e77d) e alpha no rgb() tipo rgb(R G B / A) (7441127040).
  • Alerta da Arquitetura Antiga: Aviso se o app roda na arquitetura antiga (706b6e878d).
  • Regra ESLint no-deep-imports: Ajuda a evitar imports de caminhos internos (87809d9326).
  • URLSearchParams Nativo: Manipulação de query string direto no core (af1f1e4fe5).
  • Acessibilidade Melhor: Nova prop accessibilityOrder pra Android e iOS (8cf4d5b531).
  • Pressable com onPressMove: Mais controle no toque (6df938c72e).
  • APIs do EventEmitter: Métodos addListener e removeListener expostos (ff4537c15e).
  • Opção compact no Babel Preset: Permite desabilitar remoção de espaços em branco (86911003dc).
  • Utilitários Codegen Exportados: Funções e tipos do Codegen agora na raiz do pacote (c7aa3f3fe7).
  • Específico Android: Prop screenReaderFocusable exposta (4ce093154d), aviso para componentes legados com YogaMeasureFunction.measure() (9345c88a61), prop para filtrar drag-and-drop em TextInputs (d10dd7130c).
  • Específico iOS: Props de acessibilidade accessibilityLabelledBy, accessibilityDescribedBy, accessibilityHint (5b5cf0e199).

Faxina nos Bugs! 🧹 (Correções)

Ninguém gosta de bug, né? A equipe do RN mandou ver nas correções (aqui não vou listar commits pra não poluir muito, mas o changelog original tem tudo!):

  • Geral: Timers (setTimeout, etc.) mais alinhados com a web. Referências de tipos globais no TypeScript. Genéricos em VirtualizeSectionList e tipos em VirtualizedList. Estado controlado do Switch. Layout com ListEmptyComponent. Atualização de texto ao mudar a escala da fonte. Tratamento de outline com outline-offset.
  • Android: Muita atenção aos TextInput! Foco em versões antigas, renderização de bordas (uniformes e translúcidas), navegação pelo teclado, seleção dupla com dataDetectorType. Layout (bordas RTL, clipping com removeClippedSubviews, navegação com teclado em listas). Crashes (estado do pai não encontrado, event emitters em arm32). Segurança contra nulos (null safety) em várias partes. Fetch de URIs content://. Foco com teclado.
  • iOS: Adição de views filhas via interop layer. Medição de texto multiline. Interações com ScrollView (betterHitTest). Crash no RCTPullToRefreshViewComponentView. Tratamento de views inline na New Arch com texto truncado.

Hora do Adeus... 👋 (Deprecations e Remoções)

Algumas coisas estão dando tchau ou se preparando pra isso:

  • Tipos *EventData (Image, Switch, TextInput) estão deprecated. Use *Event (701859b397).
  • Android: ReactContextBaseJavaModule.getCurrentActivity() deprecated (1408c69fd8). UIManagerType.DEFAULT deprecated (use LEGACY) (a8668319ad). ResourceDrawableIdHelper.instance removido (8de401c625). Construtor EventBeatManager(ReactApplicationContext) removido (c97af95a7f). FabricSoLoader removido da API pública (902f82656e). (un)registerEventEmitter removido da interface EventDispatcher (d1c0f57073). TouchesHelper não é mais API pública (2196597e2b).
  • iOS: loadImageForURL deprecated (use nova assinatura com completionHandlerWithMetadata) (43c9a609de). RCT_NEW_ARCH_ENABLED e RCTSetNewArchEnabled deprecated (6dd721b258). RCTComputeScreenScale (094876367f) e RCTFloorPixelValue (dc97df10a2) removidos.

Por Baixo dos Panos ⚙️ (Outras Mudanças)

Resumindo a Ópera 🎶

É isso! O React Native 0.80.0-rc traz um monte de refinamentos, continua a migração pra Kotlin no Android, adiciona funcionalidades legais (oi, gradientes radiais!) e corrige vários bugs. Os links dos commits estão aí pra quem quiser cavar mais fundo!

Fica de olho principalmente nos breaking changes, especialmente se você tem código nativo customizado ou dependia de imports internos. Agora é testar e preparar seus apps! Bom código pra todo mundo! 🚀

Fica Ligado! 👀

Este review cobre o que rolou até a versão v0.80.0-rc.3.
Conforme novas versões RC forem saindo, vou atualizar este post pra gente ficar sempre por dentro das últimas novidades, beleza?

Ah, e só pra contar os bastidores: pra montar este resumão, usei uma ajudinha da IA pra dar aquela primeira filtrada e organizada no changelog gigante. Depois, claro, veio o toque humano pra refinar, simplificar a linguagem e garantir que tudo fizesse sentido pro nosso dia a dia. 😉

Top comments (0)