Pular para o conteúdo
Skillpedia
Apps de celular280 mil · #111

react-native-patterns

Ajuda seu agente a criar e editar aplicativos móveis com React Native e Expo. Ele lida com navegação, dados, estilos e armazenamento seguro.

O que ela faz

Este guia ensina como organizar e construir aplicativos para celular usando React Native e Expo. Ele mostra as melhores práticas para navegação, gerenciamento de dados, exibição de listas, estilização e uso de recursos do celular.

Quando usar

  • ✓Ao criar novas telas ou componentes em um app React Native.
  • ✓Ao configurar como o usuário navega entre as telas do app.
  • ✓Ao decidir como guardar e buscar informações no app.

Exemplo do que pedir para a IA

“Como posso organizar a navegação entre as telas do meu app React Native usando Expo Router?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/react-native-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/react-native-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O guia sugere usar o Expo Router para organizar as telas por arquivos. Ele também explica como separar os tipos de dados (do servidor, do cliente, de formulários) e como buscar informações de forma eficiente usando bibliotecas como TanStack Query.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill react-native-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/react-native-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões React Native / Expo

Padrões práticos para construir aplicativos React Native de produção com Expo. Abrange navegação, estado, busca de dados, listas, estilização e APIs nativas. Complementa o conjunto de regras rules/react-native/: as regras dizem o quê impor, esta habilidade mostra como.

As bibliotecas nomeadas abaixo (NativeWind, Zustand/Jotai, TanStack Query) são opções comuns e bem estabelecidas mostradas para ilustração — os padrões importam mais do que o pacote específico, e qualquer equivalente funciona. Zod é usado para validação para manter a consistência com as regras existentes de typescript/ da ECC.

Esses padrões assumem o fluxo gerenciado do Expo (Expo Router, EAS, módulos expo-*) na Nova Arquitetura (o padrão nos SDKs recentes do Expo, obrigatório a partir do SDK 55+). Eles NÃO assumem o DOM do navegador — React Native não tem <div>, barra de URL, nem padrões de busca de dados da web.

Quando Ativar

Use esta habilidade quando:

  • Construindo ou editando telas, componentes ou navegação React Native / Expo
  • Configurando roteamento com Expo Router (roteamento baseado em arquivo na pasta app/)
  • Decidindo onde o estado pertence (cache do servidor vs. armazenamento do cliente vs. parâmetros de rota vs. formulário)
  • Conectando a busca de dados com TanStack Query e validando respostas com Zod
  • Renderizando listas longas ou pesadas
  • Escolhendo ou aplicando uma abordagem de estilização (NativeWind ou StyleSheet)
  • Acessando APIs nativas do dispositivo (câmera, localização, notificações) ou armazenamento seguro
  • Revisando código RN para problemas específicos de mobile

NÃO use os padrões web/React-DOM aqui — URL-como-estado, <div> e SWR-para-navegador não se aplicam ao React Native.

Conceitos Principais

Estrutura do projeto (Expo Router)

Roteamento baseado em arquivo sob app/. Mantenha os arquivos de rota enxutos: eles leem e validam parâmetros, depois delegam para um componente de tela que vive em components/ ou features/.

app/
  _layout.tsx          # root stack
  (tabs)/
    _layout.tsx        # tab navigator
    index.tsx          # Home
  user/[id].tsx        # dynamic route
components/
features/
  user/UserProfile.tsx

Navegação: valide parâmetros de rota

Deep links e rotas dinâmicas entregam strings não confiáveis. Valide-as com Zod antes de usar.

// app/user/[id].tsx
import { useLocalSearchParams, router } from 'expo-router'
import { z } from 'zod'
import { UserProfile } from '@/features/user/UserProfile'

const Params = z.object({ id: z.string().uuid() })

export default function UserRoute() {
  const parsed = Params.safeParse(useLocalSearchParams())
  if (!parsed.success) {
    router.replace('/not-found')
    return null
  }
  return <UserProfile userId={parsed.data.id} />
}

Estado: mantenha as preocupações separadas

Não duplique dados do servidor em um armazenamento do cliente. Cada preocupação tem seu próprio lugar.

Preocupação Escolhas comuns
Estado do servidor (dados remotos) uma biblioteca de cache do servidor (TanStack Query, SWR)
Estado do cliente/UI um armazenamento leve (Zustand, Jotai) ou Context
Estado da rota/navegação parâmetros do Expo Router
Estado do formulário uma biblioteca de formulários (ex: React Hook Form) + validação de schema
Segredos / tokens expo-secure-store
Persistência não secreta AsyncStorage / MMKV

Prefira useState local até que o estado realmente precise ser compartilhado.

Busca de dados: uma biblioteca de cache + Zod

Use uma biblioteca de cache do servidor (TanStack Query, SWR) em vez de fetch-in-useEffect. Valide na fronteira e infira tipos do schema. Lide explicitamente com estados de carregamento, erro e vazio. (O exemplo usa TanStack Query.)

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
import { z } from 'zod'

const User = z.object({ id: z.string(), email: z.string().email() })
type User = z.infer<typeof User>

export function useUser(id: string) {
  return useQuery({
    queryKey: ['user', id],
    queryFn: async (): Promise<User> => User.parse(await api.getUser(id)),
  })
}

export function useUpdateEmail(id: string) {
  const qc = useQueryClient()
  return useMutation({
    mutationFn: (email: string) => api.updateEmail(id, email),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['user', id] }),
  })
}

Listas: virtualize, nunca mapeie um array grande em um ScrollView

import { FlatList } from 'react-native'

<FlatList
  data={items}
  keyExtractor={(item) => item.id}
  renderItem={renderItem}          // memoized
  initialNumToRender={10}
  windowSize={5}
/>

Use FlashList (Shopify) para listas grandes ou heterogêneas.

Estilização: escolha um sistema

…

Perguntas frequentes

O que é Expo Router?

É uma forma de organizar as telas do seu aplicativo React Native baseada em arquivos, onde a estrutura de pastas define a navegação.

Por que separar os tipos de dados?

Separar os dados ajuda a manter o código organizado e evita que informações do servidor sejam duplicadas desnecessariamente no aplicativo.

Como exibir listas longas de forma eficiente?

O guia recomenda usar técnicas como 'virtualização' com componentes como FlatList para que o aplicativo não fique lento ao exibir muitos itens.

Detalhes

Descrição original do autor

React Native and Expo app patterns — Expo Router navigation, state separation (server/client/route/form), TanStack Query data fetching with Zod, performant lists, NativeWind/StyleSheet styling, native APIs, and secure storage. Use when building or editing React Native / Expo screens, components, navigation, or data layers.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#111
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas