Przejdź do głównej zawartości

Przepisy rozwoju React

Twój projektant właśnie przekazał ci plik Figma z 30 ekranami, tech lead chce TypeScript wszędzie, a deadline jest w przyszły piątek. Te przepisy zamieniają tę presję w dostarczone funkcje. Każdy z nich to gotowy prompt, który generuje produkcyjnej jakości kod React — nie komponent z tutoriala, który się rozpadnie gdy dodasz prawdziwe dane.

  • Prompty do generowania typowanych komponentów React z projektów lub wymagań
  • Przepisy zarządzania stanem dla Zustand, React Query i wzorców kontekstu
  • Prompty optymalizacji wydajności, które znajdują i naprawiają prawdziwe wąskie gardła
  • Przepisy testowania generujące sensowne pokrycie, nie testy-zaznaczenie-checkboxa

Przepis 1: Wygeneruj typowany komponent z projektu Figma

Dział zatytułowany „Przepis 1: Wygeneruj typowany komponent z projektu Figma”

Scenariusz: Masz projekt Figma karty cenowej i potrzebujesz pixel-perfekcyjnego komponentu React z propsami TypeScript i stylowaniem Tailwind.

Włącz serwer Figma MCP w swojej aplikacji desktopowej Figma (Preferences > Enable Dev Mode MCP Server), następnie dodaj go w Cursor Settings > MCP. Zaznacz komponent w Figma, potem otwórz tryb Agent.

Oczekiwane wyjście: Plik komponentu .tsx z typowanym interfejsem propsów, klasami Tailwind odpowiadającymi projektowi, wariantami responsywnymi i towarzyszącym plikiem .stories.tsx z co najmniej trzema wariantami (default, loading, error).


Przepis 2: Zbuduj tabelę danych z sortowaniem, filtrowaniem i paginacją

Dział zatytułowany „Przepis 2: Zbuduj tabelę danych z sortowaniem, filtrowaniem i paginacją”

Scenariusz: Potrzebujesz wielokrotnego użytku komponentu tabeli danych do panelu administracyjnego, który obsługuje 10 000+ wierszy bez zacinania.

Oczekiwane wyjście: Trzy pliki — DataTable.tsx z generycznym komponentem, data-table.types.ts ze współdzielonymi typami i DataTableExample.tsx demonstrujący użycie z typem User.


Scenariusz: Odziedziczyłeś 400-liniowy komponent klasowy z componentDidMount, componentDidUpdate i shouldComponentUpdate. Musi stać się komponentem funkcyjnym bez zmiany zachowania.

Oczekiwane wyjście: Funkcyjny komponent UserDashboard, niestandardowy hook useUserDashboard.ts i wszystkie istniejące testy nadal przechodzące.


Przepis 4: Skonfiguruj Zustand z TypeScript i middleware Persist

Dział zatytułowany „Przepis 4: Skonfiguruj Zustand z TypeScript i middleware Persist”

Scenariusz: Potrzebujesz globalnego stanu klienta dla preferencji użytkownika, motywu i stanu zwiniętego paska bocznego. Powinien przetrwać odświeżenie strony.

Oczekiwane wyjście: Plik store’a, plik selectors.ts z typowanymi hookami i plik __tests__/app-store.test.ts testujący wszystkie akcje i persystencję.


Scenariusz: Twoja aplikacja wykonuje 15 różnych wywołań API i zarządzasz stanami loading/error wszędzie za pomocą useState. Czas scentralizować z React Query.

Oczekiwane wyjście: Konfiguracja query client, 5 niestandardowych hooków, wrapper providera, narzędzie testowe i co najmniej jeden test na hook.


Scenariusz: Twoja aplikacja React potrzebuje 4 sekund na wyrenderowanie strony z listą produktów. React DevTools Profiler pokazuje 200+ niepotrzebnych re-renderów.

Otwórz katalog komponentów, zaznacz wszystkie pliki, następnie użyj trybu Agent z poniższym promptem.

Oczekiwane wyjście: Zmodyfikowane pliki komponentów z celowanymi optymalizacjami, każdy udokumentowany komentarzem wyjaśniającym uzasadnienie wydajnościowe.


Scenariusz: Masz komponent CheckoutForm z walidacją, wywołaniami API i warunkowym renderowaniem. Ma zero testów.

Oczekiwane wyjście: Plik CheckoutForm.test.tsx z 8+ przypadkami testowymi, prawidłową konfiguracją mocków i asercjami dostępności.


Przepis 8: Zbuduj bibliotekę niestandardowych hooków

Dział zatytułowany „Przepis 8: Zbuduj bibliotekę niestandardowych hooków”

Scenariusz: Twój zespół ciągle reimplementuje te same wzorce — debouncing, synchronizacja z local storage, media queries, intersection observer. Potrzebujecie współdzielonej biblioteki hooków.

Oczekiwane wyjście: Siedem plików hooków, siedem plików testowych i eksport barrel index.ts.


Przepis 9: Zaimplementuj Error Boundaries z przywracaniem

Dział zatytułowany „Przepis 9: Zaimplementuj Error Boundaries z przywracaniem”

Scenariusz: Gdy komponent w twoim dashboardzie pada, cała strona staje się biała. Potrzebujesz granularnych error boundaries pozwalających użytkownikom na ponowienie.

Oczekiwane wyjście: Trzy pliki komponentów, jeden plik hooka, jeden plik testowy obejmujący przechwytywanie błędów i przywracanie.


Przepis 10: Podział na Server Component i Client Component (React 19)

Dział zatytułowany „Przepis 10: Podział na Server Component i Client Component (React 19)”

Scenariusz: Migrujesz stronę Next.js aby używać React Server Components. Musisz zidentyfikować, które części wymagają "use client", a które mogą pozostać na serwerze.

Oczekiwane wyjście: Zrefaktoryzowana strona z czystymi granicami serwer/klient, udokumentowana komentarzami wyjaśniającymi każdą decyzję.


Scenariusz: Twoja aplikacja ma 5 różnych implementacji modali, żadna z nich nie obsługuje poprawnie pułapki fokusu ani nawigacji klawiaturowej.

Oczekiwane wyjście: Katalog komponentu Modal ze złożonymi komponentami, hookiem, wariantem potwierdzenia i testami dostępności.


Przepis 12: Zaimplementuj optymistyczny UI dla aplikacji Todo

Dział zatytułowany „Przepis 12: Zaimplementuj optymistyczny UI dla aplikacji Todo”

Scenariusz: Twoja lista todo jest ślamazarna, bo każda akcja czeka na odpowiedź serwera przed aktualizacją UI.

Oczekiwane wyjście: Zrefaktoryzowane hooki mutacji z logiką optymistycznych aktualizacji, zaktualizowane komponenty UI pokazujące wskaźniki synchronizacji i testy weryfikujące zachowanie optymistyczne.


Scenariusz: Twoja aplikacja ma 12 formularzy i każdy obsługuje walidację inaczej. Potrzebujesz spójnego systemu formularzy.

Oczekiwane wyjście: Komponent FormField, wrapper Form, 4 schematy Zod, niestandardowy hook i testy walidacji.


Przepis 14: Zaimplementuj code splitting z leniwym ładowaniem opartym na trasach

Dział zatytułowany „Przepis 14: Zaimplementuj code splitting z leniwym ładowaniem opartym na trasach”

Scenariusz: Twój bundle ma 2.4 MB, a początkowe ładowanie trwa 6 sekund na mobilnym. Większość użytkowników odwiedza tylko 2-3 strony na sesję.

Oczekiwane wyjście: Zaktualizowany router z leniwymi trasami, wrappery Suspense, error boundaries, narzędzie prefetch i komponent LazyRoute.


Scenariusz: Twój build CRA trwa 90 sekund, a hot reload ma 3-sekundowe opóźnienie. Czas przejść na Vite.

Oczekiwane wyjście: Zaktualizowane pliki konfiguracyjne, zmigrowane zmienne środowiskowe, usunięte zależności CRA i działająca konfiguracja Vite.