npx create-expo-app. Rode no celular antes da aula.View, Text, FlatList, TouchableOpacity, ActivityIndicator nos docs oficiais.π Material de chegada: Expo Go instalado + projeto rodando no celular + 1 dΓΊvida sobre custom hooks. Esses 3 itens alimentam o daily de abertura.
Mobile-first, RN em 1 slide, padrΓ£o MVVM e a anatomia Model / ViewModel / View em TypeScript real.
Receber um componente "tudo num arquivo" e separar em Model + useEspetaculosViewModel + EspetaculosScreen. MR individual.
feat/espetaculos-mvvmfetch nem useEffectπ― SaΓda do dia: MR individual com o refactor nos 3 arquivos (model, viewmodel, view) + 1 frase sobre o que ficou testΓ‘vel. Sem ponderada hoje β prepara o terreno pro TDD da aula 7.
Framework do Meta para construir apps mobile iOS e Android com JavaScript/TypeScript. Os componentes (<View>, <Text>) sΓ£o traduzidos em componentes nativos (UIView, android.view.View) β nΓ£o sΓ£o WebView.
RN usa os componentes nativos do SO (UIButton, Material). Flutter desenha tudo num canvas prΓ³prio (Skia) β visual 100% controlado, mas sem look-and-feel nativo automΓ‘tico.
Componente puro de UI. NΓ£o tem lΓ³gica de negΓ³cio. Renderiza estado e dispara eventos.
MantΓ©m o estado da View, chama o Model, expΓ΅e aΓ§Γ΅es. Sem JSX. Em React: um custom hook.
Tipos, validaΓ§Γ£o, fetch da API. NΓ£o conhece a View nem o ViewModel. ReusΓ‘vel em qualquer tela.
No MVC clΓ‘ssico a Controller orquestra tudo e a View conhece o Model. No MVVM a ViewModel isola β a View sΓ³ sabe falar com o VM. Reduz acoplamento, ganha testabilidade.
View β VM: input do usuΓ‘rio muda estado (ex.: digitou no campo). VM β View: estado novo re-renderiza a UI. Em React isso Γ© o ciclo natural de useState + re-render.
π PrincΓpio: o Model Γ© puro β sem React, sem hooks, sem UI. Pode ser testado com Jest sem montar componente. ReusΓ‘vel em qualquer tela do app.
π‘ Por que custom hook? No React funcional, hooks sΓ£o ViewModels. Carregam estado da tela, expΓ΅em aΓ§Γ΅es, nΓ£o tem JSX. TestΓ‘veis com @testing-library/react-hooks sem renderizar UI β exatamente o que MVVM promete.
π Note: a View nΓ£o tem fetch, nΓ£o tem useEffect, nΓ£o conhece a API. SΓ³ consome o que o ViewModel expΓ΅e. Trocar a fonte de dados (mock, GraphQL, Firestore) nΓ£o toca nesse arquivo.
useState Β· estado local simplesuseReducer Β· transiΓ§Γ΅es complexasaventura://espetaculo/42RootStackParamListπ Regra de bolso: comece com useState dentro do hook ViewModel. Promova para Zustand quando 2+ telas compartilharem o mesmo estado. NΓ£o use Redux sΓ³ porque Γ© famoso.
Quebre o arquivo ao lado nas 3 camadas que vocΓͺ viu nos slides 8β10:
model/Espetaculo.ts β tipo + fetchEspetaculos()viewmodels/useEspetaculosViewModel.ts β items, loading, error, reloadviews/EspetaculosScreen.tsx β sΓ³ consome o hookRegra: a View nΓ£o pode ter fetch nem useEffect. Pode usar IA pra acelerar.
feat/espetaculos-mvvmπ Ponte pra aula 7: o ViewModel que vocΓͺ isolou hoje Γ© exatamente o que vamos testar com TDD na prΓ³xima aula β sem montar a UI. Hoje vocΓͺ o tornou testΓ‘vel; lΓ‘ escrevemos os testes.