React Native 0.75 — Suporte para valores em porcentagem no layout, estabilização da Nova Arquitetura, atualizações de template & init, e mais
Hoje estamos animados em lançar o React Native 0.75!
Esta versão traz vários recursos, como o Yoga 3.1 com suporte a valores em “%”, várias correções de estabilidade para a Nova Arquitetura, e a introdução da recomendação para que usuários utilizem um framework React Native.
Destaques
- Yoga 3.1 e melhorias no layout
- Estabilização da Nova Arquitetura
- Uso de frameworks
Breaking Changes
- Touchables em TypeScript não podem mais ser usados como tipos em expressões genéricas
- Última versão com suporte a minSdk 23 e minIOSVersion 13.4
- Android: remoção do JSIModule
- Android: PopUp Menu removido do core
- iOS: trabalho de descontinuação do Push Notifications finalizado
- Community CLI: remoção dos comandos ram-bundle e profile-hermes
Destaques Detalhados
Yoga 3.1 e Melhorias no Layout
Desde a entrega da versão 3.0 do Yoga no React Native 0.74, continuamos adicionando melhorias e novos recursos de layout. O RN 0.75 vem com o Yoga 3.1.
Uma funcionalidade notável e muito solicitada é o suporte a valores em “%” em vários casos, como gaps e transformações. Esses recursos estão disponíveis somente para a Nova Arquitetura — caso deseje usá-los, considere migrar para ela.
Valores em porcentagem em gaps
Com a versão 0.75, as props gap, columnGap e rowGap agora suportam strings com valores em “%”.
Exemplo em React:
function App(): React.JSX.Element {
return (
<SafeAreaView
style={{
marginTop: 20,
alignItems: 'center',
flex: 1,
rowGap: '20%',
}}>
<View style={{ flex: 1, flexDirection: 'row', columnGap: '10%' }}>
<View style={{ backgroundColor: 'purple', width: 100, height: 100 }} />
<View style={{ backgroundColor: 'blue', width: 100, height: 100 }} />
<View style={{ backgroundColor: 'green', width: 100, height: 100 }} />
</View>
{/* Outras Views aninhadas... */}
</SafeAreaView>
);
}Valores em porcentagem em transformações
A prop transform agora aceita valores com “%” para transformações translate.
Exemplo:
function Translated() {
return (
<SafeAreaView style={{ marginTop: 20, flex: 1, rowGap: '20%' }}>
<View
style={{
backgroundColor: 'red',
width: 100,
height: 100,
transform: [{ translateY: '100%' }, { translateX: '100%' }],
}}
/>
</SafeAreaView>
);
}Estabilização da Nova Arquitetura
Desde que anunciamos o beta da Nova Arquitetura na React Conf, várias correções e melhorias foram introduzidas. Nosso objetivo é que a Nova Arquitetura seja considerada estável em breve. Nos últimos meses, focamos em preencher lacunas entre a arquitetura antiga e a nova.
Alguns bugs e faltas solucionados incluem:
- Correção de
adjustsFontSizeToFitno Android textAlignagora funciona com views inline no Android- Alinhamento de baseline de texto corrigido no iOS
Trabalhamos com a equipe da Expo para adicionar informações sobre suporte à Nova Arquitetura no React Native Directory, facilitando a verificação de compatibilidade de bibliotecas.
Também disponibilizamos uma nova API considerada estável para acessar o jsi::Runtime em TurboModules de forma segura, substituindo a abordagem experimental anterior.
Como usar o jsi::Runtime em TurboModules
- iOS: implemente o protocolo
RCTTurboModuleWithJSIBindings, usandoinstallJSIBindingsWithRuntimepara acesso thread-safe ao runtime em Swift/Obj-C. - Android: implemente a interface
TurboModuleWithBindings, e utilize o método JNIgetBindingsInstallerpara acesso via C++.
Além disso, temos CallInvoker como API para executar trabalho de forma segura na thread JavaScript — tanto no iOS via RCTCallInvokerModule, quanto no Android via JNI CallInvokerHolder.
Uso de Frameworks
Conforme compartilhado na React Conf, a forma recomendada para criar aplicativos React Native agora é usando um framework, como o Expo.
Para refletir essa orientação, esta versão traz duas mudanças:
- O diretório
/templatefoi movido do pacotereact-nativepara o repositório@react-native-community/template. - O comando
react-native initserá descontinuado em 31 de dezembro de 2024.
Se você já usa um framework como o Expo, essas mudanças não impactarão você. O RN 0.75 continua compatível com o Expo SDK 51.
Melhorias de desempenho no Auto-linking
Durante os aprimoramentos do comando init, reescrevemos a lógica de auto-linking para torná-la mais performática. Como resultado, a velocidade de build melhorou significativamente.
Se você usa Expo com o RN 0.75:
- No Android: auto-linking até ~6,5× mais rápido
- No iOS: até ~1,5× mais rápido
Breaking Changes Detalhados
Touchables em TypeScript
TouchableOpacity e TouchableHighlight foram convertidos em componentes funcionais, o que significa que não podem mais ser usados como tipo em expressões genéricas.
Exemplo inválido:
import { TouchableHighlight } from 'react-native';
const ref = useRef<TouchableHighlight>(); // ✗ inválidoUse alternatives:
const ref1 = useRef<React.ElementRef<typeof TouchableHighlight>>();
const ref2 = useRef<View>();Suporte mínimo de versão
RN 0.75 será a última versão com suporte ao minSdk 23 (Android 6.0) e ao minIOSVersion 13.4. A partir do RN 0.76, os mínimos exigidos serão minSdk 24 (Android 7.0) e iOS 15.1.
Android: remoções importantes
- O
JSIModulefoi removido; utilize Turbo Native Modules como alternativa. - Métodos relacionados ao
PopUpMenuforam removidos do core; agora use o componente<PopupMenuAndroid />do pacote@react-native/popup-menu-android.
iOS: finalização da descontinuação do PushNotificationIOS
Interfaces legadas foram removidas:
+ (void)didReceiveLocalNotification:(UILocalNotification *)notification;
+ (void)didReceiveRemoteNotification:(NSDictionary *)notification;Use em seu lugar:
didReceiveNotification:(UNNotification *)notificationCommunity CLI: remoção de comandos
Foram removidos os comandos:
ram-bundle(antes usado para rodar bundles direto na memória; substituído pelo Hermes)profile-hermes(usado para perfilamento de CPU com formato.cpuprofile, agora acessível via painel “Profiler” no debugger experimental)
Outras mudanças importantes (gerais, Android, iOS)
- Refatorações em TurboModules, C++, ESLint, Linting, Runtime, CocoaPods, entre outros. (omito detalhes exaustivos por concisão, mas estão no original)
Agradecimentos
O React Native 0.75 contém mais de 1.491 commits de 165 contribuidores. Muito obrigado a todos!
Agradecimentos especiais a:
- Nick Gerleman e Joe Vilches (Yoga 3.1 e Layout)
- Arushi Kesarwani (support ao UIManager na Nova Arquitetura)
- Phillip Pan (acesso ao jsi::Runtime via TurboModules)
- Alan Lee e Soe Lynn (limites de suporte minSdk/iOS)
- Kudo Chien (melhorias no auto-linking)
- Alex Hunt (remoção dos comandos ram-bundle e profile-hermes)
Como atualizar para 0.75
- Use o React Native Upgrade Helper para comparar e aplicar alterações da sua versão atual.
- Para criar um novo projeto:
npx @react-native-community/cli@latest init MyProject --version latest- Se você usa o Expo, o RN 0.75 já é compatível com o Expo SDK 51 — atualizações possíveis conforme orientação da documentação.
0.75 é a versão estável mais recente; o suporte à versão 0.72.x foi encerrado.
