A Nova Arquitetura está aqui
23 de outubro de 2024 · 24 min de leitura
React Native 0.76 com a Nova Arquitetura por padrão já está disponível no npm!
No 0,76 lançar postagem do blog, compartilhamos uma lista de mudanças significativas incluídas nesta versão. Nesta postagem, fornecemos uma visão geral da Nova Arquitetura e como ela molda o futuro do React Native.
A Nova Arquitetura adiciona suporte total aos recursos modernos do React, incluindo Suspense, Transições, dosagem automática, e useLayoutEffect. A Nova Arquitetura também inclui novos Módulo Nativo e Componente nativo sistemas que permitem escrever código seguro para tipos com acesso direto a interfaces nativas sem ponte.
Esta versão é o resultado de uma reescrita do React Native na qual estamos trabalhando desde 2018, e tomamos cuidado extra para tornar a Nova Arquitetura uma migração gradual para a maioria dos aplicativos. Em 2021, criamos o Grupo de Trabalho de Nova Arquitetura colaborar com a comunidade para garantir uma experiência de atualização tranquila para todo o ecossistema React.
A maioria dos aplicativos poderá adotar o React Native 0.76 com o mesmo nível de esforço de qualquer outra versão. As bibliotecas React Native mais populares já suportam a Nova Arquitetura. A Nova Arquitetura também inclui uma camada de interoperabilidade automática para permitir compatibilidade retroativa com bibliotecas direcionadas à arquitetura antiga.
Nos últimos anos de desenvolvimento, nossa equipe compartilhou publicamente nossa visão para a Nova Arquitetura. Se você perdeu alguma dessas palestras, confira aqui:
- React Native UE 2019 — O Novo React Native
- React Conf 2021 — Palestra Principal do React 18
- App.js 2022 — Trazendo a nova arquitetura React Native para a comunidade OSS
- React Conf 2024 — Palestra principal do dia 2
O que é a Nova Arquitetura
A Nova Arquitetura é uma reescrita completa dos principais sistemas que sustentam o React Native, incluindo como os componentes são renderizados, como as abstrações JavaScript se comunicam com as abstrações nativas e como o trabalho é agendado em diferentes threads. Embora a maioria dos usuários não precise pensar em como esses sistemas funcionam, essas mudanças trazem melhorias e novos recursos.
Na arquitetura antiga, o React Native se comunicava com a plataforma nativa usando uma ponte assíncrona. Para renderizar um componente ou chamar uma função nativa, o React Native precisava serializar e enfileirar chamadas de funções nativas com a ponte, que seriam processadas de forma assíncrona. O benefício dessa arquitetura é que o thread principal nunca foi bloqueado para renderizar atualizações ou manipular chamadas de função de módulo nativo, já que todo o trabalho foi feito em um thread em segundo plano.
No entanto, os usuários esperam que o feedback imediato às interações pareça um aplicativo nativo. Isso significa que algumas atualizações precisam ser renderizadas de forma síncrona em resposta à entrada do usuário, potencialmente interrompendo qualquer renderização em andamento. Como a arquitetura antiga era apenas assíncrona, precisávamos reescrevê-la para permitir atualizações assíncronas e síncronas.
Além disso, na arquitetura antiga, serializar chamadas de função pela ponte rapidamente se tornou um gargalo, especialmente para atualizações frequentes ou objetos grandes. Isso tornou difícil para os aplicativos atingirem 60+ FPS de forma confiável. Também houve problemas de sincronização: quando o JavaScript e a camada nativa ficaram fora de sincronia, foi impossível reconciliá-los de forma síncrona, resultando em bugs como listas mostrando quadros de espaço vazio e saltos visuais na interface do usuário devido à renderização de estados intermediários.
Por fim, como a arquitetura antiga mantinha uma única cópia da interface do usuário usando a hierarquia nativa e alterava essa cópia no lugar, o layout só podia ser computado em um único thread. Isso impossibilitou o processamento de atualizações urgentes, como entradas do usuário, e o layout não pôde ser lido de forma síncrona, como ler um efeito de layout para atualizar a posição de uma dica de ferramenta.
Todos esses problemas significavam que não era possível suportar adequadamente os recursos simultâneos do React. Para resolver estes problemas, a Nova Arquitetura inclui quatro partes principais:
- O novo sistema de módulos nativos
- O novo renderizador
- O Loop de Eventos
- Removendo a Ponte
O sistema New Module permite que o React Native Renderer tenha acesso síncrono à camada nativa, o que lhe permite manipular eventos, agendar atualizações e ler o layout de forma assíncrona e síncrona. Os novos Módulos Nativos também são carregados preguiçosamente por padrão, proporcionando aos aplicativos um ganho significativo de desempenho.
O Novo Renderizador pode manipular várias árvores em andamento em vários threads, o que permite que o React processe várias prioridades de atualização simultâneas, seja no thread principal ou em um thread em segundo plano. Ele também suporta a leitura de layout de vários threads de forma síncrona ou assíncrona, para suportar UIs mais responsivas sem jank.
O novo Event Loop pode processar tarefas no thread JavaScript em uma ordem bem definida. Isso permite que o React interrompa a renderização para processar eventos para que eventos urgentes do usuário possam ter prioridade sobre transições de UI de menor prioridade. O Event Loop também se alinha com as especificações da web, para que possamos oferecer suporte a recursos do navegador, como microtarefas MutationObserver, e IntersectionObserver.
Por fim, a remoção da ponte permite uma inicialização mais rápida e comunicação direta entre o JavaScript e o tempo de execução nativo, de modo que o custo do trabalho de troca seja minimizado. Isso também permite melhores relatórios de erros, depuração e redução de falhas por comportamento indefinido.
A Nova Arquitetura está agora pronta para ser utilizada na produção. Ele já é usado em escala na Meta no aplicativo do Facebook e em outros produtos. Usamos com sucesso o React Native e a Nova Arquitetura no aplicativo do Facebook e Instagram que desenvolvemos para nosso Dispositivos de busca.
Nossos parceiros já utilizam a Nova Arquitetura em produção há meses: dê uma olhada nessas histórias de sucesso de Despensar e Kraken, e dê Bluesky uma chance com seu novo lançamento.
Novos módulos nativos
O novo Native Module System é uma grande reescrita de como o JavaScript e a plataforma nativa se comunicam. Ele foi escrito inteiramente em C++, o que desbloqueia muitos novos recursos:
- Acesso síncrono de e para o tempo de execução nativo
- Segurança de tipo entre JavaScript e código nativo
- Compartilhamento de código entre plataformas
- Carregamento lento do módulo por padrão
No novo sistema Native Module, o JavaScript e a camada nativa agora podem se comunicar de forma síncrona entre si por meio da JavaScript Interface (JSI), sem a necessidade de usar uma ponte assíncrona. Isso significa que seus Módulos Nativos personalizados agora podem chamar uma função de forma síncrona, retornar um valor e passar esse valor de volta para outra função do Módulo Nativo.
Na arquitetura antiga, para lidar com uma resposta de chamadas de funções nativas, você precisava fornecer um retorno de chamada, e o valor retornado precisava ser serializável:
// ❌ Sync callback from Native Module
nativeModule.getValue(value => {
// ❌ value cannot reference a native object
nativeModule.doSomething(value);
});Na Nova Arquitetura, você pode fazer chamadas síncronas para funções nativas:
// ✅ Sync response from Native Module
const value = nativeModule.getValue();
// ✅ value can be a reference to a native object
nativeModule.doSomething(value);Com a Nova Arquitetura, você pode finalmente aproveitar todo o poder de uma implementação nativa C++ enquanto ainda a acessa a partir de APIs JavaScript/TypeScript. O Novo Sistema de Módulos suporta módulos escritos em C++ assim, você pode escrever seu módulo uma vez, e ele funciona em todas as plataformas, incluindo Android, iOS, Windows e macOS. A implementação de módulos em C++ permite um gerenciamento de memória mais refinado e otimizações de desempenho.
Além disso, com Codegen, seus módulos podem definir um contrato fortemente tipado entre a camada JavaScript e a camada nativa. Pela nossa experiência, erros do tipo transfronteiriço são uma das fontes mais comuns de falhas em aplicativos multiplataforma. O Codegen permite que você supere esses problemas e, ao mesmo tempo, gere código padrão para você.
Por fim, os módulos agora são carregados preguiçosamente: eles são carregados na memória somente quando são efetivamente necessários, e não na inicialização. Isso reduz o tempo de inicialização do aplicativo e o mantém baixo à medida que a complexidade do aplicativo aumenta.
Bibliotecas populares como reagir-nativo-mmkv já vi benefícios na migração para os novos Módulos Nativos:
“Os novos módulos nativos simplificaram bastante a configuração, a vinculação automática e a inicialização
react-native-mmkv. Graças à Nova Arquitetura,react-native-mmkvagora é um módulo nativo C++ puro, o que permite que ele funcione em qualquer plataforma. O novo Codegen permite que o MMKV seja totalmente seguro em termos de tipo, o que corrigiu um problema de longa dataNullPointerReferenceproblema ao impor segurança nula e poder chamar funções do Módulo Nativo de forma síncrona nos permitiu substituir o acesso JSI personalizado pela nova API do Módulo Nativo.”Marc Rousavy, criador de
react-native-mmkv
Novo renderizador
Também reescrevemos completamente o Native Renderer, adicionando vários benefícios:
- As atualizações podem ser renderizadas em diferentes threads e em diferentes prioridades.
- O layout pode ser lido de forma síncrona e em diferentes threads.
- O renderizador é escrito em C++ e compartilhado em todas as plataformas.
O Native Renderer atualizado agora armazena a hierarquia de visualização em uma estrutura de árvore imutável. Isso significa que a UI é armazenada de uma forma que não pode ser alterada diretamente, permitindo o processamento de atualizações com segurança de thread. Isso permite que ele manipule diversas árvores em andamento, cada uma representando uma versão diferente da interface do usuário. Como resultado, as atualizações podem ser renderizadas em segundo plano sem bloquear a UI (como durante as transições) ou no thread principal (em resposta à entrada do usuário).
Ao oferecer suporte a vários threads, o React pode interromper uma atualização de baixa prioridade para renderizar uma urgente, como aquelas geradas pelas entradas do usuário, e então retomar a atualização de baixa prioridade conforme necessário. O novo renderizador também pode ler informações de layout de forma síncrona e em diferentes threads. Isso permite computação em segundo plano para atualizações de baixa prioridade e leituras síncronas quando necessário, como reposicionar uma dica de ferramenta.
Por fim, reescrever o renderizador em C++ permite que ele seja compartilhado entre todas as plataformas. Isso garante que o mesmo código seja executado em iOS, Android, Windows, macOS e qualquer outra plataforma suportada pelo React Native, fornecendo recursos de renderização consistentes sem a necessidade de reimplementação para cada plataforma.
Este é um passo significativo em direção à nossa Muitas visões de plataforma. Por exemplo, o View Flattening era uma otimização somente para Android para evitar árvores de layout profundas. O novo renderizador, com núcleo C++ compartilhado, traz esse recurso para o iOS. Essa otimização é automática e não requer configuração, ela vem gratuitamente com o renderizador compartilhado.
Com essas mudanças, o React Native agora oferece suporte total aos recursos simultâneos do React, como Suspense e Transições, facilitando a criação de interfaces de usuário complexas que respondem rapidamente às entradas do usuário sem problemas, atrasos ou saltos visuais. No futuro, aproveitaremos esses novos recursos para trazer mais melhorias aos componentes integrados, como FlatList e TextInput.
Bibliotecas populares como Reanimado já estão aproveitando o Novo Renderer:
“O Reanimated 4, atualmente em desenvolvimento, apresenta um novo mecanismo de animação que funciona diretamente com o New Renderer, permitindo que ele manipule animações e gerencie o layout em diferentes threads. O design do New Renderer é o que realmente permite que esses recursos sejam criados sem depender de inúmeras soluções alternativas. Além disso, por ser implementado em C++ e compartilhado entre plataformas, grandes partes do Reanimated podem ser escritas uma vez, reduzindo problemas específicos da plataforma, minimizando a base de código e agilizando a adoção para plataformas fora da árvore.”
Krzysztof Magiera, criador de Reanimado
O Loop de Eventos
A Nova Arquitetura nos permitiu implementar um modelo de processamento de loop de eventos bem definido, conforme descrito neste RFC. Este RFC segue as especificações descritas no Padrão HTML, e descreve como o React Native deve executar tarefas no thread JavaScript.
Implementar um loop de eventos bem definido fecha lacunas entre o React DOM e o React Native: o comportamento de um aplicativo React Native agora está mais próximo do comportamento de um aplicativo React DOM, tornando mais fácil aprender uma vez e escrever em qualquer lugar.
O loop de eventos traz muitos benefícios para o React Native:
- A capacidade de interromper a renderização para processar eventos e tarefas
- Alinhamento mais próximo com as especificações da web
- Fundação para mais recursos do navegador
Com o Event Loop, o React é capaz de ordenar atualizações e eventos de forma previsível. Isso permite que o React interrompa uma atualização de baixa prioridade com um evento de usuário urgente, e o Novo Renderer nos permite renderizar essas atualizações de forma independente.
Os Event Loops também alinham o comportamento de eventos e tarefas, como temporizadores, com especificações da web, o que significa que o React Native funciona mais como o que os usuários estão familiarizados na Web e permite melhor compartilhamento de código entre o React DOM e o React Native.
Ele também permite a implementação de recursos de navegador mais compatíveis, como microtarefas, MutationObserver, e IntersectionObserver. Esses recursos ainda não estão prontos para uso no React Native, mas estamos trabalhando para trazê-los até você no futuro.
Finalmente, o Event Loop e o New Renderer mudam para oferecer suporte ao layout de leitura de forma síncrona, permitindo que o React Native adicione suporte adequado para useLayoutEffect para ler informações de layout de forma síncrona e atualizar a UI no mesmo quadro. Isso permite que você posicione os elementos corretamente antes que eles sejam exibidos ao usuário.
Ver useLayoutEffect para mais detalhes.
Removendo a Ponte
Na Nova Arquitetura, também removemos totalmente a dependência do React Native na ponte, substituindo-a por comunicação direta e eficiente entre JavaScript e código nativo usando JSI:
A remoção da ponte melhora o tempo de inicialização, evitando a inicialização da ponte. Por exemplo, na arquitetura antiga, para fornecer métodos globais ao JavaScript, precisaríamos inicializar um módulo em JavaScript na inicialização, causando um pequeno atraso no tempo de inicialização do aplicativo:
// ❌ Slow initialization
import {NativeTimingModule} from 'NativeTimingModule';
global.setTimeout = timer => {
NativeTimingModule.setTimeout(timer);
};
// App.js
setTimeout(() => {}, 100);Na Nova Arquitetura, podemos vincular diretamente métodos de C++:
// ✅ Initialize directly in C++
runtime.global().setProperty(runtime, "setTimeout", createTimer);
// App.js
setTimeout(() => {}, 100);A reescrita também melhora os relatórios de erros, especialmente para falhas de JavaScript na inicialização, e reduz falhas de comportamento indefinido. Se ocorrerem acidentes, o novo Ferramentas de desenvolvimento nativas do React simplifique a depuração e dê suporte à Nova Arquitetura.
A ponte permanece para compatibilidade com versões anteriores para dar suporte à migração gradual para a Nova Arquitetura. No futuro, removeremos completamente o código da ponte.
Migração Gradual
Esperamos que a maioria dos aplicativos possa atualizar para a versão 0.76 com o mesmo esforço de qualquer outra versão.
Quando você atualiza para 0.76, a Nova Arquitetura e o React 18 são habilitados por padrão. No entanto, para usar recursos simultâneos e obter todos os benefícios da Nova Arquitetura, seu aplicativo e bibliotecas precisarão ser migrados gradualmente para oferecer suporte total à Nova Arquitetura.
Ao atualizar pela primeira vez, seu aplicativo será executado na Nova Arquitetura com uma camada de interoperabilidade automática com a arquitetura antiga. Para a maioria dos aplicativos, isso funcionará sem alterações, mas existem limitações conhecidas com a camada de interoperabilidade, pois ela não oferece suporte ao acesso a nós de sombra personalizados ou recursos simultâneos.
Para usar recursos simultâneos, os aplicativos também precisarão ser atualizados para oferecer suporte Reação simultânea seguindo o Regras de Reagir. Para migrar seu código JavaScript para o React 18 e sua semântica, siga o Guia de atualização do React 18.
A estratégia geral é fazer com que seu aplicativo seja executado na Nova Arquitetura sem quebrar o código existente. Você pode então migrar gradualmente seu aplicativo no seu próprio ritmo. Para novas superfícies que migraram todos os módulos para a Nova Arquitetura, você pode começar a usar recursos simultâneos imediatamente. Para superfícies existentes, pode ser necessário resolver alguns problemas e migrar módulos antes de adicionar recursos simultâneos.
Colaboramos com as bibliotecas React Native mais populares para garantir suporte à Nova Arquitetura. Mais de 850 bibliotecas já são compatíveis, incluindo todas as bibliotecas com mais de 200 mil downloads semanais (~10% das bibliotecas baixadas). Você pode verificar a compatibilidade da biblioteca com a Nova Arquitetura no reactnative.diretório site:
Para obter mais detalhes sobre a atualização, consulte Como atualizar abaixo.
Novos recursos
A Nova Arquitetura inclui suporte total para React 18, recursos simultâneos e useLayoutEffect em React Native. Para obter uma lista completa dos recursos do React 18, consulte o Postagem do blog React 18.
Transições
Transições são um novo conceito no React 18 para distinguir entre atualizações urgentes e não urgentes.
- Atualizações urgentes refletem interação direta, como digitar e pressionar.
- Atualizações de transição faça a transição da UI de uma visualização para outra.
Atualizações urgentes precisam de resposta imediata para corresponder às nossas intuições sobre como os objetos físicos se comportam. No entanto, as transições são diferentes porque o usuário não espera ver todos os valores intermediários na tela. Na Nova Arquitetura, o React Native é capaz de suportar a renderização de atualizações urgentes e atualizações de transição separadamente.
Normalmente, para a melhor experiência do usuário, uma única entrada do usuário deve resultar em uma atualização urgente e não urgente. Semelhante ao ReactDOM, eventos como press ou change são tratados como urgentes e entregues imediatamente. Você pode usar o startTransition API dentro de um evento de entrada para informar ao React quais atualizações são “transições” e podem ser adiadas para segundo plano:
import {startTransition} from 'react';
// Urgent: Show the slider value
setCount(input);
// Mark any state updates inside as transitions
startTransition(() => {
// Transition: Show the results
setNumberOfTiles(input);
});Separar eventos urgentes de transições permite uma interface de usuário mais responsiva e uma experiência de usuário mais intuitiva.
Aqui está uma comparação entre a arquitetura antiga sem transições e a nova arquitetura com transições. Imagine que cada bloco não é uma visualização trivial com uma cor de fundo, mas um componente rico contendo imagens e outros componentes que são caros para renderizar. Depois usando useTransition você evita sobrecarregar seu aplicativo com atualizações e ficar para trás.
Para mais informações, consulte Suporte para renderizador simultâneo e recursos.
Loteamento Automático
Ao atualizar para a Nova Arquitetura, você se beneficiará do processamento automático em lote do React 18.
O agrupamento automático permite que o React agrupe mais atualizações de estado durante a renderização para evitar a renderização de estados intermediários. Isso permite que o React Native seja mais rápido e menos suscetível a atrasos, sem nenhum código adicional do desenvolvedor.
Na arquitetura antiga, mais estados intermediários são renderizados e a UI continua sendo atualizada mesmo quando o controle deslizante para de se mover. A Nova Arquitetura renderiza menos estados intermediários e conclui a renderização muito mais cedo graças ao agrupamento automático das atualizações.
Para mais informações, consulte Suporte para renderizador simultâneo e recursos.
useLayoutEffect
Com base no Event Loop e na capacidade de ler o layout de forma síncrona, na Nova Arquitetura adicionamos suporte adequado para useLayoutEffect em React Native.
Na arquitetura antiga, você precisava usar o assíncrono onLayout evento para ler informações de layout de uma visualização (que também era assíncrona). Como resultado, haveria pelo menos um quadro em que o layout estaria incorreto até que o layout fosse lido e atualizado, causando problemas como dicas de ferramentas colocadas na posição errada:
// ❌ async onLayout after commit
const onLayout = React.useCallback(event => {
// ❌ async callback to read layout
ref.current?.measureInWindow((x, y, width, height) => {
setPosition({x, y, width, height});
});
}, []);
// ...
<ViewWithTooltip
onLayout={onLayout}
ref={ref}
position={position}
/>;A Nova Arquitetura corrige isso permitindo acesso síncrono às informações de layout useLayoutEffect:
// ✅ sync layout effect during commit
useLayoutEffect(() => {
// ✅ sync call to read layout
const rect = ref.current?.getBoundingClientRect();
setPosition(rect);
}, []);
// ...
<ViewWithTooltip ref={ref} position={position} />;Essa alteração permite que você leia as informações de layout de forma síncrona e atualize a UI no mesmo quadro, permitindo posicionar os elementos corretamente antes que eles sejam exibidos ao usuário:
Para obter mais informações, consulte os documentos para Layout e efeitos síncronos.
Suporte total para suspense
O Suspense permite que você especifique declarativamente o estado de carregamento de uma parte da árvore de componentes, caso ela ainda não esteja pronta para ser exibida:
<Suspense fallback={<Spinner />}>
<Comments />
</Suspense>Introduzimos uma versão limitada do Suspense há vários anos e o React 18 adicionou suporte total. Até agora, o React Native não era capaz de suportar renderização simultânea para Suspense.
A Nova Arquitetura inclui suporte total para Suspense introduzido no React 18. Isso significa que agora você pode usar o Suspense no React Native para lidar com estados de carregamento de seus componentes, e o conteúdo suspenso será renderizado em segundo plano enquanto o estado de carregamento é exibido, dando maior prioridade à entrada do usuário no conteúdo visível.
Para mais informações, consulte o RFC para Suspense no React 18.
Como atualizar
Para atualizar para 0,76, siga as etapas do postagem de lançamento. Como esta versão também atualiza para o React 18, você também precisará seguir o Guia de atualização do React 18.
Essas etapas devem ser suficientes para que a maioria dos aplicativos atualize para a Nova Arquitetura graças à camada de interoperabilidade com a arquitetura antiga. No entanto, para aproveitar ao máximo a Nova Arquitetura e começar a usar recursos simultâneos, você precisará migrar seus Módulos Nativos e Componentes Nativos personalizados para oferecer suporte às novas APIs de Módulos Nativos e Componentes Nativos.
Sem migrar seus módulos nativos personalizados, você não obterá os benefícios do C++ compartilhado, chamadas de métodos síncronos ou segurança de tipo do codegen. Sem migrar seus Componentes Nativos, você não poderá usar recursos simultâneos. Recomendamos migrar todos os Componentes Nativos e Módulos Nativos para a Nova Arquitetura o mais rápido possível.
Nota: Em uma versão futura, removeremos a camada de interoperabilidade e os módulos precisarão oferecer suporte à Nova Arquitetura.
Aplicativos
Se você for um desenvolvedor de aplicativos, para oferecer suporte total à Nova Arquitetura, precisará atualizar suas bibliotecas, Componentes Nativos personalizados e Módulos Nativos personalizados para oferecer suporte total à Nova Arquitetura.
Colaboramos com as bibliotecas React Native mais populares para garantir suporte à Nova Arquitetura. Você pode verificar a compatibilidade da biblioteca com a Nova Arquitetura no reactnative.diretório site.
Se alguma das bibliotecas das quais seu aplicativo depende ainda não for compatível, você pode:
- Abra um problema com a biblioteca e peça ao autor para migrar para a Nova Arquitetura.
- Se a biblioteca não for mantida, considere bibliotecas alternativas com os mesmos recursos.
- Exclusão da Nova Arquitetura enquanto essas bibliotecas são migradas.
Se o seu aplicativo tiver módulos nativos personalizados ou componentes nativos personalizados, esperamos que funcionem bem, graças ao nosso camada de interoperabilidade. No entanto, recomendamos atualizá-los para as novas APIs Native Module e Native Component para oferecer suporte total à Nova Arquitetura e adotar recursos simultâneos.
Siga estes guias para migrar seus módulos e componentes para a Nova Arquitetura:
Bibliotecas
Se você é um mantenedor de biblioteca, primeiro teste se sua biblioteca funciona com a camada de interoperabilidade. Caso contrário, abra um problema no Grupo de Trabalho de Nova Arquitetura.
Para oferecer suporte total à Nova Arquitetura, recomendamos migrar sua biblioteca para as novas APIs de Módulo Nativo e Componente Nativo o mais rápido possível. Isso permitirá que os usuários da sua biblioteca aproveitem ao máximo a Nova Arquitetura e suportem recursos simultâneos.
Você pode seguir estes guias para migrar seus módulos e componentes para a Nova Arquitetura:
Excluir
Se, por qualquer motivo, a Nova Arquitetura não estiver se comportando corretamente em seu aplicativo, sempre há a opção de cancelar até que você esteja pronto para ativá-la novamente.
Para cancelar a Nova Arquitetura:
- No Android, modifique o
android/gradle.propertiesarquivar e desligar onewArchEnabledbandeira
-newArchEnabled=true
+newArchEnabled=false- No iOS, você pode reinstalar as dependências executando o comando:
RCT_NEW_ARCH_ENABLED=0 bundle exec pod installObrigado
Entregar a Nova Arquitetura à comunidade OSS foi um esforço enorme que nos levou vários anos de pesquisa e desenvolvimento. Gostaríamos de reservar um momento para agradecer a todos os membros atuais e antigos da equipe React que nos ajudaram a alcançar esse resultado.
Estamos também extremamente gratos a todos os parceiros que colaboraram connosco para que isso acontecesse. Especificamente, gostaríamos de destacar:
- Expo, por adotar a Nova Arquitetura desde o início e por apoiar o trabalho de migração das bibliotecas mais populares.
- Mansão de Software, por manter bibliotecas cruciais no ecossistema, por migrá-las para a Nova Arquitetura precocemente e por toda a ajuda na investigação e correção de vários problemas.
- Pilha de chamadas, para manter bibliotecas cruciais no ecossistema, para migrá-las precocemente para a Nova Arquitetura e para o suporte ao trabalho na CLI Comunitária.
- Microsoft, para adicionar a implementação da Nova Arquitetura para
react-native-windowsereact-native-macosbem como em várias outras ferramentas de desenvolvedor. - Despensar, Kraken, Bluesky e Brigada por sermos pioneiros na adoção da Nova Arquitetura e relatarmos vários problemas para que pudéssemos corrigi-los para todos os outros.
- Todos os mantenedores e desenvolvedores independentes de bibliotecas que contribuíram para a Nova Arquitetura testando-a, corrigindo alguns dos problemas e abrindo perguntas sobre assuntos pouco claros para que pudéssemos esclarecê-los.
