Gdy użytkownik ma zmieniać przebieg procesu, sam diagram przestaje wystarczać. Potrzebny jest edytor, który pozwala przesuwać elementy, tworzyć połączenia i zapisywać wynik zgodnie z regułami firmy. React Flow daje zespołowi React gotową warstwę interakcji, a logikę procesu i danych nadal projektujemy samodzielnie.
Krótka odpowiedź
React Flow to biblioteka React do budowania interaktywnych diagramów i edytorów opartych na węzłach oraz połączeniach. Sprawdza się w konfiguratorach, wizualnych workflow i mapach integracji, gdy użytkownik ma edytować strukturę na płótnie.
Biblioteka obsługuje renderowanie, przesuwanie, zaznaczanie, powiększanie i zdarzenia; reguły biznesowe, autoryzację oraz trwały zapis trzeba zbudować w aplikacji.
Usługi KC Mobile
Potrzebujesz pomocy w tym temacie?
Czytasz poradnik „React Flow: jak tworzyć interaktywne schematy i edytory?”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.
Czym jest React Flow i do jakich interfejsów służy?
React Flow jest biblioteką komponentów React do tworzenia diagramów, w których użytkownik może wchodzić w interakcję z elementami. Projekt rozwija zespół xyflow, a aktualny pakiet instaluje się jako `@xyflow/react`. Komponent `
Statyczny diagram pokazuje ustaloną strukturę, na przykład schemat obiegu dokumentu na stronie pomocy. Interaktywny edytor dodaje działania: użytkownik przenosi kroki, łączy je, wybiera element i zmienia jego parametry. Te różnice mają znaczenie dla uprawnień, walidacji, zapisu oraz późniejszego wykonania procesu.
| Potrzeba | Statyczny diagram | Edytor w React Flow |
|---|---|---|
| Pokazanie przepływu | Tak | Tak |
| Przesuwanie elementów przez użytkownika | Nie | Tak, jeśli włączone |
| Edycja relacji | Nie | Tak, przez połączenia i obsługę zdarzeń |
| Reguły biznesowe | Zwykle poza diagramem | Aplikacja musi je zdefiniować |
| Zapis zmian | Niepotrzebny lub ręczny | Wymaga własnego mechanizmu |
Biblioteka pasuje do wizualnego edytora procesów, kreatora automatyzacji, konfiguratora produktu lub mapy przepływu danych. Nie zastępuje silnika workflow: dodanie krawędzi na ekranie samo w sobie nie uruchamia zamówienia ani nie gwarantuje, że proces jest poprawny. Granice odpowiedzialności warto opisać już podczas wyboru architektury, podobnie jak przy integracji systemów i API.
Czytasz poradnik „React Flow: jak tworzyć interaktywne schematy i edytory?”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny. Omów temat tego poradnika
Jakie elementy składają się na diagram?
Diagram w React Flow opisuje przede wszystkim węzły i krawędzie, a pozostałe elementy wspierają połączenia oraz nawigację po płótnie. Model danych powinien być czytelny dla aplikacji, ponieważ pozycje i relacje z diagramu mogą wpływać na zachowanie procesu.
| Element | Rola w bibliotece | Przykład w procesie zamówienia |
|---|---|---|
| `nodes` | Węzły z unikalnym `id`, pozycją, typem i danymi | "Nowe zamówienie", "Sprawdź płatność", "Wyślij do magazynu" |
| `edges` | Relacje między węzłami; zawierają m.in. identyfikatory źródła i celu | Połączenie od sprawdzenia płatności do wysyłki |
| `handles` | Punkty wejścia i wyjścia węzła, używane do tworzenia relacji | Wejście "zamówienie", wyjście "opłacone" |
| `viewport` | Pozycja i poziom powiększenia widoku diagramu | Powrót użytkownika do miejsca, w którym zakończył edycję |
| `Controls` | Gotowe przyciski powiększania, pomniejszania, dopasowania widoku i blokady interakcji | Przywrócenie całego procesu w kadrze |
Obiekt węzła może przechowywać typ oraz dane domenowe, ale nie należy traktować pola `data` jako zamiennika całego modelu zamówienia. Węzeł może zawierać identyfikator kroku, konfigurację i informację o stanie prezentacji. Dane finansowe czy dane osobowe powinny podlegać własnym zasadom dostępu i przechowywania.
`Handle` wskazuje, gdzie użytkownik może rozpocząć lub zakończyć połączenie. Jego `type` to `source` albo `target`, a `id` pozwala odróżnić kilka punktów na tym samym węźle. `isValidConnection` przyjmuje połączenie i zwraca `true` lub `false`; dokumentacja zaleca umieszczenie logiki walidacji na głównym komponencie, jeśli to możliwe, zamiast powtarzać ją dla każdego uchwytu.
Jak uruchomić pierwszy projekt z React Flow?
Minimalny prototyp powinien sprawdzić cały cykl interakcji: renderowanie węzłów, przesunięcie ich i dodanie relacji. Zacznij od projektu React, zainstaluj pakiet i zaimportuj wymagane style.
1. W istniejącym projekcie uruchom `npm install @xyflow/react`.
2. W komponencie zaimportuj `ReactFlow`, `useState`, `useCallback`, `addEdge`, `applyNodeChanges` i `applyEdgeChanges` z `@xyflow/react`.
3. Przygotuj dwa obiekty węzłów z różnymi identyfikatorami i pozycjami oraz pustą lub wstępnie utworzoną tablicę krawędzi.
4. Podłącz `onNodesChange` i `onEdgesChange`, aby aktualizować stan po przesuwaniu i zmianach diagramu. W `onConnect` użyj `addEdge`, aby dodać relację z połączenia utworzonego przez użytkownika.
5. Nadaj kontenerowi diagramu określoną wysokość i zaimportuj `@xyflow/react/dist/style.css`.
Przykładowy szkielet stanu może wyglądać tak: `const [nodes, setNodes] = useState(initialNodes);` oraz `const [edges, setEdges] = useState([]);`. W kontrolowanym diagramie aplikacja odpowiada za przekazanie aktualnych tablic i obsługę zmian. Gdy style się nie ładują lub canvas ma zerową wysokość, najpierw sprawdź kolejność importu CSS i wysokość rodzica komponentu.
Dokumentacja Quick Start zwraca uwagę, że w projektach z Tailwind CSS 4 główny arkusz React Flow należy importować po `tailwindcss` w pliku globalnym, takim jak `global.css` lub `index.css`. To zapobiega nadpisywaniu stylów w nieoczekiwanej kolejności. Do szybkiego sprawdzenia pomysłu można też użyć oficjalnego szablonu Vite React Flow.
Prototyp nie jest jeszcze gotowym edytorem produkcyjnym. Przed rozbudową ustal, czy aplikacja będzie właścicielem stanu, jak zapisze wersję procesu i kto może zmieniać opublikowany diagram. Przy wyborze technologii projektu porównaj też wymagania React Flow z innymi decyzjami frontendowymi, np. wyborem między Bootstrapem i Tailwind CSS.

Jak zaprojektować własne węzły i połączenia?
Własny typ węzła ma sens, gdy element procesu ma inne dane lub zachowanie niż standardowy prostokąt. W React Flow deklarujesz komponenty w `nodeTypes`, a węzeł otrzymuje między innymi `data` oraz właściwości potrzebne do prezentacji i interakcji. Wewnątrz komponentu umieszczasz `Handle` dla wejść i wyjść.
Przykład: węzeł "Sprawdzenie płatności" może mieć jedno wejście dla zamówienia oraz dwa wyjścia: "opłacone" i "odrzucone". Aplikacja rozpoznaje typy uchwytów i sprawdza przy połączeniu, czy dany krok może przekazać taki rodzaj wyniku do kolejnego kroku. Walidacja nie powinna opierać się wyłącznie na kolorze ani tekście widocznym w węźle.
Użyj standardowego węzła, gdy wystarczy tytuł, podstawowe punkty wejścia i wyjścia oraz domyślna prezentacja. Komponent niestandardowy jest uzasadniony, kiedy krok wymaga własnego formularza, stanu błędu, różnych portów lub zwięzłego podglądu konfiguracji. Każdy dodatkowy typ zwiększa koszt utrzymania: trzeba przetestować jego wygląd, zmianę danych, połączenia i zachowanie po odtworzeniu diagramu.
`isValidConnection` powinno weryfikować reguły, które można ocenić na podstawie diagramu, np. zakaz łączenia węzła z samym sobą albo zgodność typów portów. Reguły zależne od aktualnego stanu zamówienia, dostępności magazynu czy uprawnień użytkownika wymagają sprawdzenia również po stronie serwera. Walidacja w przeglądarce poprawia informację zwrotną, lecz nie jest zabezpieczeniem API.
Jak zapisywać i odtwarzać schemat?
React Flow udostępnia `toObject` w instancji, aby pobrać obiekt diagramu, a oficjalny przykład Save and Restore pokazuje też zapis lokalnego stanu `nodes` i `edges`. Trwałość, dostęp do danych oraz obsługę błędów projektuje aplikacja. Przed zapisem należy sprawdzić schemat, a przy odczycie potraktować dane z bazy jak wejście wymagające walidacji.
| Sposób | Co przechowuje | Kiedy pasuje | Główne ryzyko |
|---|---|---|---|
| Lokalny stan React | Aktualny diagram w pamięci widoku | Edycja bez trwałego zapisu | Zmiany znikają po odświeżeniu lub zamknięciu widoku |
| JSON w przeglądarce lub pliku | Serializowany diagram, np. eksport ręczny | Prototyp, import/eksport lub praca offline | Brak automatycznej synchronizacji i kontroli dostępu |
| API i baza danych | Diagram przypisany do użytkownika, firmy lub wersji procesu | Współdzielona aplikacja biznesowa | Trzeba wdrożyć autoryzację, walidację, migracje i obsługę konfliktów |
Trwały format warto opisać jako własny kontrakt, np. `{ schemaVersion, nodes, edges, viewport }`. Węzły i relacje powinny mieć stabilne identyfikatory, a `schemaVersion` pozwala rozpoznać strukturę, którą trzeba zmigrować. Nie zapisuj do bazy pól wyliczanych lub wewnętrznych bez sprawdzenia, czy rzeczywiście są częścią kontraktu aplikacji.
Przed zapisem zweryfikuj wymagane pola, dozwolone typy węzłów, niepowtarzalność identyfikatorów, istnienie końców każdej krawędzi oraz limit rozmiaru payloadu. Przy odczycie nieznana wersja może zakończyć się komunikatem "Nie można otworzyć diagramu w tej wersji" i propozycją migracji lub kontaktu z administratorem. Błędy API, takie jak brak uprawnień lub konflikt wersji, powinny zachować lokalny stan edycji i jasno informować o kolejnym kroku.
Wersjonowanie procesu i wersjonowanie JSON rozwiązują różne problemy. Pierwsze odpowiada na pytanie, którą zatwierdzoną definicję procesu realizuje firma; drugie pozwala aplikacji odczytać format danych po zmianie kodu. Zmiana modelu powinna mieć migrację, test odczytu starszej próbki i strategię wycofania, zanim trafi do użytkowników.

Jak dopasować edytor do procesu biznesowego?
Model procesu powinien wynikać z decyzji operacyjnych, a nie z układu elementów na płótnie. Dla zamówienia można odwzorować przyjęcie, kontrolę płatności, kompletację, wysyłkę i obsługę wyjątku jako osobne kroki, a krawędziom przypisać warunki przejścia.
| Element procesu | Co użytkownik może zmienić | Co zwykle powinno być tylko do odczytu |
|---|---|---|
| Krok do wykonania | Nazwę roboczą, opis, wybór z zatwierdzonego katalogu | Identyfikator systemowy, historię wykonań |
| Warunek przejścia | Wartość warunku w dozwolonym formularzu | Wynik walidacji i zapis audytowy |
| Integracja z systemem | Wskazane przez administratora połączenie | Sekrety, tokeny i dane uwierzytelniające |
| Status diagramu | Opis roboczy, kolejność w szkicu | Status publikacji i wersja aktualnie wykonywana |
W praktyce dobrze działa rozdzielenie trybu edycji od trybu podglądu. Osoba układająca proces może dodawać dozwolone kroki, natomiast operator wykonujący zamówienie widzi aktualny przepływ i status bez możliwości przypadkowego przesunięcia węzłów. To rozdzielenie ogranicza ryzyko zmiany aktywnego procesu podczas pracy operacyjnej.
Perspektywa KC Mobile: podczas projektowania edytora najpierw ustalamy, które decyzje użytkownik ma podejmować na płótnie, a które powinny wynikać z konfiguracji systemowej. Jeśli oba zakresy mieszają się w jednym widoku, zespół musi później dopisywać wyjątki do uprawnień, formularzy i zapisu. Warto więc przetestować na prototypie typowy przebieg oraz przypadek błędny, zanim diagram stanie się częścią codziennej pracy.
Jak zadbać o wydajność i dostępność?
Wydajność zależy nie tylko od liczby węzłów, lecz także od tego, jak często aplikacja przelicza i renderuje ich zawartość. Dokumentacja zaleca ograniczanie zbędnych renderów, stabilne referencje dla funkcji i danych przekazywanych do React Flow oraz ostrożne używanie `onlyRenderVisibleElements`, które może pomóc przy dużych diagramach, ale samo dodaje narzut.
Przed wdrożeniem zdefiniuj scenariusze testowe: przesunięcie węzła z rozbudowanym formularzem, zaznaczanie grupy, zoomowanie, wczytanie największego przewidywanego diagramu i zapis po serii zmian. Obserwuj opóźnienie reakcji, błędy konsoli i zużycie pamięci na docelowych urządzeniach. Dla długiego przepływu rozważ filtrowanie, grupowanie lub widoki etapów, zamiast zmuszać użytkownika do ciągłego powiększania całego płótna.
React Flow ma ustawienia focusowania węzłów i krawędzi oraz konfigurowalne etykiety ARIA przez `ariaLabelConfig`. Nie zwalnia to z testów czytnikiem ekranu i klawiaturą. Zapewnij widoczny fokus, opisowe nazwy kroków, kontrast stanu błędu niezależny od samego koloru oraz alternatywę dla przeciągania, na przykład wybór kroku i polecenie dodania połączenia.
Sprawdź, czy użytkownik może powiększyć widok, przesunąć płótno, wybrać element i uruchomić jego edycję bez myszy. Przetestuj też powiększenie przeglądarki i wąski viewport. Jeżeli interfejs ma być częścią strony firmowej lub panelu CMS, uwzględnij jego rolę w całym produkcie, a nie tylko w samym diagramie; pomocny punkt wyjścia stanowi porównanie systemów CMS.
Kiedy React Flow nie jest dobrym wyborem?
React Flow sprawdza się wtedy, gdy użytkownik potrzebuje edytować relacje na dwuwymiarowym płótnie. Przy prostym, niezmiennym schemacie pełny edytor może zwiększyć zakres kodu, testów i dostępności bez poprawy zadania użytkownika. Wybór zależy od tego, czy diagram ma być tylko reprezentacją, czy narzędziem do konfigurowania działania firmy.
| Typ interfejsu | Poziom interakcji | Nakład implementacji | Koszt utrzymania |
|---|---|---|---|
| Prosty diagram informacyjny | Odczyt i ewentualne powiększanie | Niski przy gotowej grafice lub renderowaniu | Niski, jeśli struktura się nie zmienia |
| Edytor procesów | Węzły, relacje, formularze i walidacja | Średni lub wysoki zależnie od reguł i ról | Rosnący wraz z typami kroków i wersjami |
| Mapa danych | Odczyt wielu relacji i nawigacja | Średni; zależy od źródeł i skali danych | Wymaga kontroli jakości i aktualności danych |
| Workflow automatyzacji | Edycja, publikacja, wykonanie i obsługa błędów | Wysoki, bo diagram łączy się z logiką wykonawczą | Wymaga monitoringu i zgodności wersji |
Jeśli użytkownik ma wyłącznie zrozumieć kolejność kroków, wystarczy lista, tabela lub statyczny diagram. Jeśli musi konfigurować połączenia, a zespół potrzebuje komponentów React do swobodnej prezentacji, React Flow daje mocną bazę interfejsu. Sam nie dostarczy jednak kolejki zadań, orkiestracji, kontroli uprawnień ani rejestrowania wykonania.
Wdrożenie edytora warto powierzyć zespołowi, który połączy frontend z modelem domenowym, API i obsługą wersji. Tworzenie aplikacji w React może objąć projekt interfejsu, warstwę logiki oraz integrację z systemami używanymi przez firmę. W przypadku rozbudowanego procesu zakres prac należy ustalić wokół realnych ról i reguł, a nie samego wyglądu diagramu.
Więcej poradników w tym temacie
Wspomniane narzędzia
Najczęściej zadawane pytania
React Flow co to jest i do czego służy?
Czy React Flow jest darmowy?
Jak zapisać diagram React Flow do bazy danych?
Czy w React Flow można tworzyć własne typy węzłów?
Czym różnią się nodes i edges w React Flow?
Potrzebujesz pomocy w tym temacie?
Czytasz poradnik „React Flow: jak tworzyć interaktywne schematy i edytory?”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.
