[Duvida] React Native

Olá a todos,

Eu estou começando no React Native e possuo algumas duvidas, sobre stacks ou libs para acompanhar este lindo framework.

Não sei se a melhor forma de criar uma UI, seria utilizando o proprio StyleSheet ou Styled Components, ou alguma outra lib de components UI (se houver alguma, recomendar) Criar components com base no shadcn/ui é uma ideia interessante?

Axios ou fetch ? Acredito que esta duvida está me perseguindo a alguns tempos

Expo-router ou React router(com React Navigation) ? Se for expo-router qual a melhor estrutura a se montar com Expo-Router ?

A melhor forma de fazer uma request é realmente utilizando ela dentro de um useEffect ? Ou talvez partir para um react-query ?

Dados que devem ser utilizados offline, Redux ? LocalStorage ou database local ?

Qual é a melhor estrutura, Pattern para se utilizar em uma aplicação RN ?

Essas são algumas duvidas que eu possuo sempre que vou iniciar um projeto, claro que muitas delas variam conforme o projeto.

Ficaria grato se alguem pudesse contribuir com algum estudo, sobre patterns que utilizem alguma desssas libs informadas, ou um caminho para estruturar de forma clean o projeto.

  1. Estilos e UI:

    • O StyleSheet padrão do React Native é uma escolha sólida para estilos simples e performance, mas você também pode considerar bibliotecas como Styled Components ou styled-system se preferir abordagens mais próximas do CSS.
    • Para componentes UI, o shadcn/ui é uma opção, mas existem muitas outras bibliotecas populares, como React Native Elements, UI Kitten, NativeBase, e Paper (Material Design).
  2. Requisições HTTP:

    • Ambos Axios e fetch são boas escolhas. O Axios é mais fácil de usar, tem uma API mais simples e suporta facilmente a criação de instâncias globais com configurações personalizadas. O fetch é uma API nativa do navegador, portanto, não é necessário importar bibliotecas adicionais.
  3. Navegação:

    • O React Navigation é uma escolha popular para a navegação em React Native. No entanto, se você estiver usando o Expo, pode considerar o Expo-Router, que é uma alternativa simplificada. A escolha entre eles depende das necessidades específicas do seu aplicativo.
  4. Requisições HTTP e Estado Global:

    • O uso de useEffect para requisições HTTP é uma abordagem comum e adequada. Quanto ao estado global, você pode considerar React Context API, Redux, ou até mesmo Mobx para gerenciar o estado global da sua aplicação. A escolha depende da complexidade do seu aplicativo e das preferências da equipe.
  5. Dados Offline:

    • Para dados que precisam ser usados offline, você pode considerar o AsyncStorage (uma API para armazenamento de chave-valor), bancos de dados locais como o SQLite, ou uma biblioteca de gerenciamento de estado que suporta armazenamento offline, como o Redux Persist.
  6. Estrutura e Padrões:

    • Ao desenvolver um projeto React Native, é uma boa prática seguir padrões como a arquitetura Flux ou Redux para gerenciamento de estado, dividir seu código em componentes reutilizáveis, seguir o princípio DRY (Don't Repeat Yourself) e manter a organização do projeto em mente para facilitar a manutenção.
Poxa que legal Daniel, obrigado por contribuir com as minhas duvidas, estou vendo que é escenssial o uso do Redux no RN, existem mais alguns outros principios além do DRY, para que eu consiga realizar uma aplicação mais escalavel possivel ? Ja dei uma boa olhada em composition pattern, é uma ideia incrivel para components dinamicos