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
Mensagem pronta para colar
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-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/react-native-patterns/SKILL.md -o SKILL.mdConteú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
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
flutter-animating-apps
Faz seu agente adicionar efeitos animados e transições em aplicativos Flutter. É útil para criar movimento e design visual em apps para iOS e Android.
nexu-io/open-design
add-app-clip
Faz seu agente adicionar um App Clip do iOS a um app Expo. É útil para criar versões leves de apps que são abertas por links.
sickn33/agentic-awesome-skills
android-dev
Ajuda a desenvolver aplicativos Android. Cobre diferentes formas de criar apps, nativos ou multiplataforma.
sickn33/agentic-awesome-skills