Wzorce rozwoju React Native
ENAgent AI dobrze radzi sobie z React Native, gdy zna przypięte wersje bibliotek, a każda zmiana przechodzi bramki niewymagające ludzkiego czytelnika: sprawdzenie typów, lint, Jest z React Native Testing Library, flow Maestro na urządzeniu i build release. Z tymi bramkami agent może przejąć dane offline, wydajność list i uwierzytelnianie biometryczne.
Ta strona jest dla programistów i liderów technicznych, którzy wypuszczają aplikację React Native do App Store i Google Play. Twój FlatList zacina się na średniej klasy Androidzie, gdy lista przekroczy kilkaset wierszy. Build release ulega awarii na module natywnym, którego build deweloperski nigdy nie załadował. Ekran offline z zeszłotygodniowego demo gubi zapisy, gdy sieć się zrywa. Nic z tego nie widać w symulatorze na laptopie, a wszystko to jest pracą zależną od konkretnych bibliotek, którą agent wykonuje dobrze, gdy wie, o którą bibliotekę i wersję chodzi.
Dopiero zaczynasz konfigurować agenta do pracy mobilnej? Zacznij od przeglądu rozwoju aplikacji mobilnych, który opisuje wybór stosu, instalację jego skilli i weryfikację na symulatorach.
Co dają ci wzorce React Native z tej strony
Dział zatytułowany „Co dają ci wzorce React Native z tej strony”- Tabelę wersji i blok instrukcji projektu, które powstrzymują agenta przed pisaniem API ze starszej wersji głównej
- Prompt do szkieletu, który daje aplikację Expo z testami i bramkami od pierwszego dnia
- Prompt offline-first dla
react-native-mmkvv4 i TanStack Query, z mutacjami, które przetrwają zabicie aplikacji - Prompt do FlashList v2 i polecenie dla Androida, które dowodzi, że zacinanie zniknęło
- Prompt do bramki biometrycznej, która przełącza na kod zamiast blokować użytkownika
- Tabelę weryfikacji: która bramka czego dowodzi i kto zatwierdza zmianę
- Mapę awarii, których nigdy nie widać w symulatorze, z krokami naprawy
Jakie wersje React Native zakłada ta strona?
Dział zatytułowany „Jakie wersje React Native zakłada ta strona?”Agenci mieszają API z kilku wersji głównych, bo ich dane treningowe obejmują je wszystkie. Podaj wersje w prompcie albo w instrukcjach projektu. Tabela pokazuje, co npm serwował 26.09.2026.
| Pakiet | Wersja 26.09.2026 | Co zmienia się dla agenta |
|---|---|---|
react-native | 0.87.1 (Expo SDK 57 przypina 0.86.3) | Nowa Architektura jest jedyną architekturą: 0.82 usunęło możliwość jej wyłączenia (changelog React Native) |
expo | 57.0.25 | Pakiety natywne instaluj przez npx expo install, nigdy przez ręczną edycję wersji |
@shopify/flash-list | 2.3.2 (SDK 57 przypina 2.0.2) | v2 działa tylko na Nowej Architekturze i nie przyjmuje szacunków rozmiaru |
react-native-mmkv | 4.3.2 | v4 to Nitro Module: createMMKV() i storage.remove(), a nie new MMKV() i storage.delete() |
@tanstack/react-query | 5.104.0 | Utrwalanie przez @tanstack/react-query-persist-client i @tanstack/query-sync-storage-persister |
@testing-library/react-native | 14.0.1 | v14 porzuca React 18, zmienia render i renderHook na asynchroniczne i wymaga pakietu test-renderer jako peer dependency |
jest-expo | 57.0.5 | Preset Jest, który Expo dokumentuje dla testów jednostkowych; mockuje natywną stronę Expo SDK |
Nową aplikację zaczynaj na Expo. Domyślny szablon create-expo-app to TypeScript z Expo Router. Szczegóły SDK, EAS i aktualizacji over-the-air opisuje strona wzorce rozwoju Expo; ta strona obejmuje pracę z React Native, która wygląda tak samo z Expo i bez niego.
Daj agentowi kontekst React Native przed pierwszym promptem
Dział zatytułowany „Daj agentowi kontekst React Native przed pierwszym promptem”Trzy rzeczy zmieniają wynik agenta bardziej niż jakiekolwiek sformułowanie promptu: powyższa tabela wersji, lista bramek, które agent musi uruchomić, oraz skille dziedzinowe lub serwery MCP, dzięki którym sprawdzi swoją pracę na urządzeniu.
Instrukcje projektu. Wstaw ten blok do CLAUDE.md dla Claude Code, do AGENTS.md dla Codeksa i do reguły projektu w Cursorze. Treść jest identyczna we wszystkich trzech narzędziach.
## React Native rules- Expo SDK 57, React Native 0.86 (New Architecture only). Add native packages with `npx expo install`.- react-native-mmkv v4: `createMMKV()`, `storage.remove()`. FlashList v2: no `estimatedItemSize`.- Tests: Jest via `jest-expo` + @testing-library/react-native v14 with `test-renderer` (`await render(...)`). Not Vitest.
## Before you say a task is done1. `npx tsc --noEmit`2. `npx expo lint`3. `npx jest --ci`4. `npx expo install --check`5. For UI changes: run the matching Maestro flow in `.maestro/` and paste the result.Skille. Expo publikuje oficjalne skille w expo/skills (2612 gwiazdek na GitHubie 26.09.2026); instalację dla każdego narzędzia opisuje strona o Expo. Callstack, firma konsultingowa specjalizująca się w React Native (skille społecznościowe, nie od Meta), publikuje produkcyjne skille, takie jak react-native-best-practices i upgrading-react-native, w callstackincubator/agent-skills. CLI skills (1.7.0), działające z wieloma agentami, instaluje je tak samo dla Claude Code, Codeksa i Cursora:
npx skills@latest add callstackincubator/agent-skills --skill react-native-best-practicesSkille ładują się tylko wtedy, gdy zadanie ich potrzebuje, więc kosztują mało kontekstu. Zobacz instalowanie skilli i zarządzanie nimi.
Serwery MCP. CLI Maestro ma wbudowany serwer MCP (maestro mcp), dzięki któremu agent w trakcie pracy stuka, przewija i sprawdza asercje na żywym emulatorze, symulatorze albo urządzeniu z Androidem. Buildy i symulatory iOS obsługuje MobileBuildMCP (dawniej XcodeBuildMCP), opisany na stronie MCP serwerów deweloperskich. Każdy serwer MCP dodaje swoją listę narzędzi do każdej sesji, więc podłączaj Maestro tylko w repozytorium aplikacji.
# after installing the Maestro CLI (Java 17+)claude mcp add maestro -- maestro mcpcodex mcp add maestro -- maestro mcpDodaj serwer do .cursor/mcp.json:
{ "mcpServers": { "maestro": { "command": "maestro", "args": ["mcp"] } }}README Maestro (pobrane 26.09.2026) dokumentuje maestro mcp; powyższe linie dla poszczególnych klientów używają standardowej składni stdio każdego narzędzia. Jeśli twój klient potrzebuje dodatkowych opcji, sprawdź dokumentację konfiguracji MCP w Maestro.
Postaw szkielet aplikacji React Native z bramkami od pierwszego dnia
Dział zatytułowany „Postaw szkielet aplikacji React Native z bramkami od pierwszego dnia”Poproś o środowisko testowe (harness) i bramki już w prompcie do szkieletu. Aplikacja, która startuje bez nich, nigdy ich nie dostaje, a każda późniejsza zmiana agenta jest wtedy nieweryfikowalna.
Prompt jest taki sam w każdym narzędziu; różni się tylko sposób wywołania. Zapisz powyższy prompt jako scaffold-prompt.txt i uruchom z nim agenta.
claude "$(cat scaffold-prompt.txt)"Od wersji 2.1.283 (oba kanały wydań, stan na 2026-10-12) sesje interaktywne startują w trybie auto, w którym każdą akcję ocenia klasyfikator; sesje z ustawionym disableAutoMode, modele, których tryb auto nie obsługuje, oraz claude -p (z wyjątkiem zewnętrznych dostawców i wyłączonej telemetrii, gdzie od v2.1.285 startuje w trybie auto) startują w trybie Manual i pytają przed każdym poleceniem powłoki. W obu przypadkach instalacje npx są oczekiwane, a zapis poza projektem nie.
codex "$(cat scaffold-prompt.txt)"Szkielet pobiera pakiety, więc zatwierdź żądania sieciowe, gdy Codex o nie zapyta. Nie uruchamiaj go z --dangerously-bypass-approvals-and-sandbox poza jednorazowym kontenerem z ograniczoną siecią.
Wklej prompt do panelu agenta. Cursor uruchamia polecenia w swoim terminalu i pokazuje każdą edycję pliku do przeglądu. Trzymaj wynik terminala na widoku: wynik testów z ostatniego kroku jest twoim dowodem akceptacji.
Czysty React Native bez Expo (tzw. bare workflow, npx @react-native-community/cli@latest init) wybieraj tylko wtedy, gdy potrzebujesz kodu natywnego, którego nie wyrażą config plugins. Wtedy to ty utrzymujesz projekty ios/ i android/, a opisane niżej awarie dryfu natywnego stają się twoje.
Zbuduj warstwę danych offline-first, która przetrwa zabicie aplikacji
Dział zatytułowany „Zbuduj warstwę danych offline-first, która przetrwa zabicie aplikacji”„Dodaj obsługę offline” daje wrapper na AsyncStorage, który gubi zakolejkowane zapisy. Nazwij silnik przechowywania, warstwę cache i wymaganie trwałości.
Kod spinający persister nie powinien być dłuższy niż ten poniżej. Jeśli agent pisze więcej, prawdopodobnie wymyśla persister od nowa:
import { createMMKV } from 'react-native-mmkv';import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister';
const storage = createMMKV({ id: 'query-cache' });
export const persister = createSyncStoragePersister({ storage: { getItem: (key) => storage.getString(key) ?? null, setItem: (key, value) => storage.set(key, value), removeItem: (key) => { storage.remove(key); }, },});Agent najczęściej myli się w kwestii trwałości: co się stanie, gdy aplikacja zostanie zabita w trakcie synchronizacji i otwarta ponownie offline? Bez setMutationDefaults przywrócona mutacja nie ma funkcji do wywołania i po cichu nigdy się nie odtworzy. Test 1 z promptu pada dokładnie na tym błędzie i właśnie dlatego jest w prompcie. Jeśli potrzebujesz dwukierunkowej synchronizacji relacyjnej zamiast odtwarzanego cache’u, to decyzja o silniku synchronizacji (na przykład WatermelonDB); zanim poprosisz o nią agenta, potwierdź, że wybrana wersja wspiera Nową Architekturę.
Napraw FlatList, który zacina się na Androidzie
Dział zatytułowany „Napraw FlatList, który zacina się na Androidzie”Zamiana najczęściej przewijanej listy na @shopify/flash-list ponownie wykorzystuje (recykluje) widoki wierszy zamiast montować osobny widok dla każdego wiersza. Wersja 2 zmieniła zasady: nie przyjmuje szacunków rozmiaru i działa tylko na Nowej Architekturze. Jak wcześniej, prowadzi osobną pulę recyklingu dla każdej wartości getItemType; v2 polega na niej bardziej, bo sama mierzy wiersze. Agent wytrenowany na v1 dodaje estimatedItemSize, którego v2 już nie potrzebuje.
Zielony test dowodzi, że lista się renderuje, a nie że jest płynna. Aby udowodnić poprawę wydajności, zmierz build release na prawdziwym urządzeniu z Androidem ze średniej półki przed zmianą i po niej:
npx expo run:android --variant releaseadb shell dumpsys gfxinfo com.example.app reset# scroll the list for 20 seconds, then:adb shell dumpsys gfxinfo com.example.app | grep -i "janky frames"Zastąp com.example.app identyfikatorem swojej aplikacji. Wklej obie liczby do pull requesta. Jeśli wiersze różnych typów nie mają getItemType, v2 wstawia widok wysokiej karty w miejsce niskiego wiersza i widzisz miganie albo złe wysokości: to wersja v2 dawnego zacinania przy złym szacunku.
Dodaj bramkę biometryczną, która nie blokuje użytkowników
Dział zatytułowany „Dodaj bramkę biometryczną, która nie blokuje użytkowników”Face ID działa w symulatorze z włączonym Enrolled. Na prawdziwym telefonie bez zarejestrowanej biometrii albo po zbyt wielu nieudanych próbach naiwna bramka blokuje użytkownika. authenticateAsync z expo-local-authentication może się nie powieść, bo użytkownik anuluje, biometria nie jest zarejestrowana, brakuje sprzętu, użytkownik jest zablokowany albo monit wygasa.
Testy jednostkowe dowodzą rozgałęzień. Potem sprawdź każdą platformę raz na fizycznym urządzeniu, bo symulator nie odtwarza blokady.
Zbuduj funkcję od początku do końca w krokach do przeglądu
Dział zatytułowany „Zbuduj funkcję od początku do końca w krokach do przeglądu”Gdy budujesz funkcję od zera, prowadź agenta przez uporządkowane kroki zamiast jednego wielkiego promptu. Każdy krok kończy się bramką, więc akceptujesz go na podstawie dowodów i nigdy nie czytasz całego diffu na końcu.
-
Ekran i typy. „Create a
ProjectListroute with a typeduseProjects()TanStack Query hook that returns mock data.” Bramka:npm run typecheckprzechodzi. -
Prawdziwe dane i każdy stan. „Replace the mock with a fetch to
/api/projects. Add a loading skeleton, an empty state, and an error state with a Retry button that callsrefetch().” Bramka: testy RNTL dla ładowania, wierszy, stanu pustego ([]) i ponowienia, uruchomione przeznpm test. -
Wydajność. Wklej prompt do FlashList. Bramka: liczby janky frames z
gfxinfoprzed zmianą i po niej, na buildzie release. -
Zachowanie na urządzeniu. „Write
.maestro/project-list.yamlthat opens the list, scrolls to the end, and asserts the last row. Add an Android-only flow that runssetAirplaneMode: enabled, pulls to refresh, and asserts the error state and Retry.” Bramka:maestro test .maestro/przechodzi. Polecenia trybu samolotowego w Maestro działają tylko na Androidzie, bo symulatory iOS go nie obsługują.
Jak zweryfikować wynik agenta w React Native bez czytania każdej linii?
Dział zatytułowany „Jak zweryfikować wynik agenta w React Native bez czytania każdej linii?”Każda bramka odpowiada na jedno pytanie. Każ agentowi uruchomić wszystkie i dołączyć wynik do pull requesta: to ten sam pakiet dowodów, którego używa reszta serwisu.
| Bramka | Polecenie | Czego dowodzi |
|---|---|---|
| Typy | npx tsc --noEmit | Nie wślizgnęło się API ze złej wersji głównej (new MMKV() tu pada) |
| Lint | npx expo lint | Reguły hooków i nieużywany kod |
| Testy jednostkowe i komponentów | npx jest --ci | Rozgałęzienia: odtwarzanie offline, ścieżki awaryjne biometrii, stany puste i błędu |
| Zgodność zależności | npx expo install --check | Żaden pakiet natywny nie odjechał od wersji przypiętej przez SDK |
| Zachowanie na urządzeniu | maestro test .maestro/ | Nawigacja, gesty i stany offline w prawdziwym środowisku uruchomieniowym |
| Build release | npx expo run:ios --configuration Release, npx expo run:android --variant release | Ścieżka kodu, którą uruchamiają użytkownicy, z __DEV__ ustawionym na false |
| Wydajność | adb shell dumpsys gfxinfo <application-id> | Janky frames przed zmianą i po niej, na nazwanym urządzeniu |
Kto zatwierdza. Programista, który zlecił zadanie, odpowiada za kryteria akceptacji i flow Maestro. Zmiana istniejącego flow lub testu wymaga zatwierdzenia przez drugą osobę, bo agent, który edytuje test, żeby przeszedł, usunął dowód; zobacz chroń wyrocznię. Macierze urządzeń i farmy urządzeń opisuje strona testowanie aplikacji mobilnych.
Debuguj błędy widoczne tylko w release za pomocą React Native DevTools
Dział zatytułowany „Debuguj błędy widoczne tylko w release za pomocą React Native DevTools”React Native DevTools to domyślny debugger dla aplikacji na Hermes; w React Native 0.76 zastąpił przepływ z Chrome DevTools. Naciśnij j w terminalu, w którym działa Metro lub Expo. Flipper nie jest odpowiedzią: jego README podaje v0.239.0 jako ostatnie wydanie ze wsparciem React Native. Reactotron (reactotron-react-native 5.3.1 na npm) to popularny dodatek do trwałych logów sieci i stanu.
Wysyłaj buildy React Native do TestFlight i Google Play
Dział zatytułowany „Wysyłaj buildy React Native do TestFlight i Google Play”Na Expo natywną kompilację, dane uwierzytelniające i upload do sklepów obsługują EAS Build i EAS Submit; pipeline sterowany fingerprintem i etapowane aktualizacje over-the-air opisuje strona wzorce rozwoju Expo. W projekcie bez Expo sam podłączasz Fastlane do CI, a agent napisze dużo YAML-a. Ogranicz go:
Zanim scalisz workflow, porównaj go z wzorcami pipeline’ów CI/CD. Nigdy nie pozwól agentowi uruchomić produkcyjnego uploadu, żeby przetestować workflow.
Co psuje się w React Native, czego symulator nigdy nie pokaże?
Dział zatytułowany „Co psuje się w React Native, czego symulator nigdy nie pokaże?”Dokąd dalej z React Native
Dział zatytułowany „Dokąd dalej z React Native”- Wzorce rozwoju Expo: skille i MCP od Expo, bramki logowania w Expo Router, pipeline EAS i etapowane aktualizacje
- Receptury UI dla React Native i Fluttera: dwanaście promptów do UI z dowodami z urządzenia dla każdego
- Testowanie aplikacji mobilnych: Detox, Maestro i macierze urządzeń
- Receptury natywne: iOS i Android: gdy funkcja wymaga Swifta lub Kotlina
- Wzorce rozwoju Fluttera: jeśli rozważasz Darta zamiast React Native
Czy ten artykuł Ci pomógł?
Jedno kliknięcie, bez logowania.
Co z tym zrobisz?
Jak się czytało?
Co przeszkadzało? Możesz zaznaczyć kilka
Twoja rola?
Dzięki. Czytam każdą odpowiedź. Michał Jaskólski
Pomógł Ci ten artykuł?
Każde to jedno kliknięcie. Zamknij, kiedy chcesz.
bez logowania