Przeczytałem tę odpowiedź , zmniejszając płytę kotła, przejrzałem kilka przykładów GitHub, a nawet spróbowałem trochę przebudować (aplikacje do zrobienia).
Jak rozumiem, oficjalne motywacje redux doc dostarczają profesjonalistów w porównaniu do tradycyjnych architektur MVC. ALE to nie daje odpowiedzi na pytanie:
Dlaczego powinieneś używać Redux zamiast Facebook Flux?
Czy to tylko kwestia stylów programowania: funkcjonalny czy niefunkcjonalny? Czy pytanie dotyczy umiejętności / narzędzi programistycznych wynikających z podejścia redux? Może skalowanie? Czy testowanie?
Czy mam rację, jeśli powiem, że redux jest fluktuacją dla osób pochodzących z języków funkcjonalnych?
Aby odpowiedzieć na to pytanie, możesz porównać złożoność punktów motywacyjnych implementacji redux na flux vs redux.
Oto punkty motywacyjne z oficjalnych motywacji redux doc :
- Obsługa optymistycznych aktualizacji ( jak rozumiem, nie zależy to od 5. punktu. Czy trudno jest zaimplementować go na Facebooku? )
- Renderowanie na serwerze ( może to zrobić również facebook flux. Jakieś korzyści w porównaniu do redux? )
- Pobieranie danych przed wykonaniem zmiany trasy ( dlaczego nie można tego osiągnąć na Facebooku? Jakie są korzyści? )
- Hot Reload ( Jest to możliwe dzięki React Hot Reload . Dlaczego potrzebujemy redux? )
- Funkcja cofania / ponawiania
- Jakieś inne punkty? Jak trwały stan ...
Odpowiedzi:
Redux autor tutaj!
Redux nie jest , że różni się od topnika. Ogólnie rzecz biorąc ma tę samą architekturę, ale Redux jest w stanie skrócić niektóre narożniki złożoności, wykorzystując funkcjonalną kompozycję, w której Flux używa rejestracji wywołania zwrotnego.
W Redux nie ma zasadniczej różnicy, ale uważam, że sprawia, że pewne abstrakcje są łatwiejsze lub przynajmniej możliwe do wdrożenia, które byłyby trudne lub niemożliwe do wdrożenia we Fluxie.
Skład reduktora
Weźmy na przykład paginację. Przykład routera My Flux + React obsługuje podział na strony, ale kod tego jest okropny. Jednym z powodów, dla których jest to okropne, jest to, że Flux sprawia, że nienaturalne jest ponowne używanie funkcji w różnych sklepach. Jeśli dwa sklepy muszą obsługiwać paginację w odpowiedzi na różne działania, albo muszą dziedziczyć ze wspólnego magazynu podstawowego (źle! Blokujesz się w konkretnym projekcie, gdy korzystasz z dziedziczenia), lub wywołać zewnętrznie zdefiniowaną funkcję z poziomu moduł obsługi zdarzeń, który będzie musiał jakoś działać w prywatnym stanie sklepu Flux. Cała sprawa jest bałaganiarska (choć zdecydowanie w dziedzinie możliwej).
Z drugiej strony, dzięki Redux paginacja jest naturalna dzięki składowi reduktora. Reduktory są w dół, więc możesz napisać fabrykę reduktorów, która generuje reduktory stronicowania, a następnie użyć jej w drzewie reduktorów . Kluczem do tego, dlaczego jest to tak łatwe, jest to, że we Fluxie sklepy są płaskie, ale w Redux reduktory można zagnieżdżać za pomocą funkcjonalnej kompozycji, podobnie jak można zagnieżdżać komponenty React.
Ten wzór umożliwia także wspaniałe funkcje, takie jak cofanie / ponawianie kodu bez użytkownika . Czy potrafisz sobie wyobrazić podłączanie Cofnij / Powtórz do aplikacji Flux, która jest dwoma liniami kodu? Ledwie. W Redux jest to ponownie dzięki wzorowi składu reduktora. Muszę podkreślić, że nie ma w tym nic nowego - jest to wzorzec zapoczątkowany i szczegółowo opisany w Architekturze Wiązów, na który sam wpływ miał Flux.
Renderowanie serwera
Ludzie dobrze renderowali na serwerze za pomocą Fluxa, ale widząc, że mamy 20 bibliotek Fluxa, z których każda próbuje uczynić serwer „renderowaniem łatwiejszym”, być może Flux ma pewne szorstkie krawędzie na serwerze. Prawda jest taka, że Facebook nie renderuje zbyt wiele serwerów, więc nie byli tym bardzo zaniepokojeni i polegają na ekosystemie, aby to ułatwić.
W tradycyjnym systemie Flux sklepy są singletonami. Oznacza to, że trudno jest oddzielić dane dla różnych żądań na serwerze. Nie niemożliwe, ale trudne. Właśnie dlatego większość bibliotek Flux (jak również nowe narzędzia Flux ) sugerują teraz używanie klas zamiast singletonów, dzięki czemu można tworzyć instancje sklepów na żądanie.
Nadal istnieją następujące problemy, które musisz rozwiązać we Fluxie (samodzielnie lub przy pomocy swojej ulubionej biblioteki Flux, takiej jak Flummox lub Alt ):
Wprawdzie frameworki Flux (nie Vanilla Flux) mają rozwiązania tych problemów, ale uważam, że są zbyt skomplikowane. Na przykład, speszyć kogoś prosi, aby wdrożyć
serialize()
ideserialize()
w swoich sklepach . Alt rozwiązuje ten problem, zapewniająctakeSnapshot()
automatyczne serializowanie stanu w drzewie JSON.Redux idzie dalej: ponieważ istnieje tylko jeden sklep (zarządzany przez wiele reduktorów), nie potrzebujesz żadnego specjalnego API do zarządzania (ponownym) nawodnieniem. Nie musisz „przepłukiwać” ani „nawadniać” sklepów - jest tylko jeden sklep i możesz odczytać jego aktualny stan lub utworzyć nowy sklep z nowym stanem. Każde żądanie otrzymuje osobną instancję sklepu. Przeczytaj więcej o renderowaniu serwerów za pomocą Redux.
Ponownie, jest to przypadek czegoś możliwego zarówno we Fluxie, jak i Reduxie, ale biblioteki Flux rozwiązują ten problem, wprowadzając mnóstwo API i konwencji, a Redux nawet nie musi go rozwiązać, ponieważ nie ma tego problemu w pierwsze miejsce dzięki prostocie koncepcyjnej.
Doświadczenie programistów
W rzeczywistości nie zamierzałem, aby Redux stał się popularną biblioteką Flux - napisałem to, pracując nad moim wystąpieniem ReactEurope na temat przeładowywania w czasie podróży . Miałem jeden główny cel: umożliwić zmianę kodu reduktora w locie, a nawet „zmienić przeszłość” poprzez wykreślanie działań i zobaczyć, jak stan jest przeliczany.
Nie widziałem żadnej biblioteki Flux, która byłaby w stanie to zrobić. React Hot Loader również nie pozwala ci tego zrobić - w rzeczywistości psuje się, jeśli edytujesz sklepy Flux, ponieważ nie wie, co z nimi zrobić.
Kiedy Redux musi ponownie załadować kod reduktora, dzwoni
replaceReducer()
, a aplikacja działa z nowym kodem. W Flux dane i funkcje są zaplątane w sklepach Flux, więc nie można „po prostu zastąpić funkcji”. Co więcej, będziesz musiał jakoś ponownie zarejestrować nowe wersje w Dispatcherze - coś, czego Redux nawet nie ma.Ekosystem
Redux ma bogaty i szybko rozwijający się ekosystem . Wynika to z faktu, że zapewnia on kilka punktów rozszerzenia, takich jak oprogramowanie pośrednie . Został zaprojektowany z myślą o przypadkach użycia, takich jak rejestrowanie , obsługa obietnic , obserwowalności , routing , sprawdzanie twórców niezmienności , trwałość itp. Nie wszystkie z nich okażą się przydatne, ale miło jest mieć dostęp do zestawu narzędzi, które można łatwo połączyć, aby ze sobą współpracować.
Prostota
Redux zachowuje wszystkie zalety Flux (nagrywanie i odtwarzanie akcji, jednokierunkowy przepływ danych, zależne mutacje) i dodaje nowe korzyści (łatwe cofanie, ponawianie, ponowne ładowanie) bez konieczności wprowadzania dyspozytora i rejestracji w sklepie.
Utrzymanie prostoty jest ważne, ponieważ pozwala zachować rozsądek podczas wdrażania abstrakcyjnych poziomów wyższego poziomu.
W przeciwieństwie do większości bibliotek Flux, interfejs API Redux jest niewielki. Jeśli usuniesz ostrzeżenia programisty, komentarze i testy poprawności, będzie to 99 wierszy . Nie ma trudnego kodu asynchronicznego do debugowania.
Możesz go przeczytać i zrozumieć cały Redux.
Zobacz także moją odpowiedź na temat wad korzystania z Redux w porównaniu do Flux .
źródło
${login}/${name}
). Dziękuję Ci bardzo!W Quora ktoś mówi :
Również ten schemat wizualny, który stworzyłem, aby pokazać szybki przegląd obu, prawdopodobnie szybką odpowiedź dla osób, które nie chcą przeczytać całego wyjaśnienia:
Ale jeśli nadal chcesz wiedzieć więcej, czytaj dalej.
Z dokumentów Redux :
Również z dokumentów Redux :
źródło
Być może najlepiej zacząć od przeczytania tego posta Dan Abramov, w którym omawia różne implementacje Fluxa i ich kompromisy w czasie, gdy pisał redux: The Evolution of Flux Frameworks
Po drugie, strona motywacji, do której linkujesz, tak naprawdę nie omawia motywacji Redux, tak jak motywacji stojącej za Flux (i React). Te trzy zasady jest bardziej specyficzny Redux choć nadal nie radzić sobie z różnicami implementacji ze standardowego architektury Flux.
Zasadniczo Flux ma wiele sklepów, które obliczają zmianę stanu w odpowiedzi na interakcje interfejsu użytkownika / interfejsu API ze składnikami i rozgłaszają te zmiany jako zdarzenia, które mogą subskrybować składniki. W Redux istnieje tylko jeden sklep, który subskrybuje każdy komponent. IMO wydaje się, że przynajmniej Redux dodatkowo upraszcza i ujednolica przepływ danych poprzez ujednolicenie (lub ograniczenie, jak powiedziałby Redux) przepływu danych z powrotem do komponentów - podczas gdy Flux koncentruje się na ujednoliceniu drugiej strony przepływu danych - zobacz Model.
źródło
Jestem wczesnym adaptatorem i zaimplementowałem aplikację o dużej, jednostronicowej stronie, korzystając z biblioteki Facebook Flux.
Ponieważ jestem trochę spóźniony do rozmowy, po prostu podkreślę, że pomimo moich najlepszych nadziei Facebook wydaje się uważać ich wdrożenie Fluxa za dowód koncepcji i nigdy nie otrzymał uwagi, na którą zasługuje.
Zachęcam do zabawy, ponieważ odsłania on bardziej wewnętrzne działanie architektury Flux, która jest dość edukacyjna, ale jednocześnie nie zapewnia wielu korzyści, jakie zapewniają biblioteki takie jak Redux (które nie są jest to ważne w przypadku małych projektów, ale staje się bardzo cenne w przypadku większych).
Zdecydowaliśmy, że posuwając się naprzód, przejdziemy do Redux i sugeruję, abyś zrobił to samo;)
źródło
Oto proste wyjaśnienie Redux nad Flux. Redux nie ma dyspozytora, opiera się na czystych funkcjach zwanych reduktorami. Nie potrzebuje dyspozytora. Każda akcja jest obsługiwana przez jeden lub więcej reduktorów w celu aktualizacji pojedynczego sklepu. Ponieważ dane są niezmienne, reduktory zwracają nowy zaktualizowany stan, który aktualizuje sklep
Aby uzyskać więcej informacji Flux vs Redux
źródło
Długo pracowałem z Flux, a teraz dość długo z Redux. Jak zauważył Dan, obie architektury nie różnią się tak bardzo. Chodzi o to, że Redux czyni rzeczy prostszymi i czystszymi. Nauczy Cię kilku rzeczy na temat Fluxa. Jak na przykład Flux jest doskonałym przykładem jednokierunkowego przepływu danych. Rozdzielenie obaw, w których mamy dane, ich manipulacje i warstwę widoku oddzielone. W Redux mamy te same rzeczy, ale uczymy się również o niezmienności i czystych funkcjach.
źródło
Z nowego modułu adoptującego reakcję / redux migrującego z (kilku lat) ExtJS w połowie 2018 r .:
Po zjechaniu do tyłu w dół krzywej uczenia się redux, miałem to samo pytanie i pomyślałem, że czysty strumień będzie prostszy jak OP.
Wkrótce zobaczyłem zalety redux nad flux, jak zauważono w odpowiedziach powyżej, i pracowałem nad tym w mojej pierwszej aplikacji.
Znów chwytając płytę kotła, wypróbowałem kilka innych bibliotek zarządzania stanem, najlepiej znalazłem rewanż .
Było o wiele bardziej intuicyjne niż redux waniliowy, odcina 90% płyty głównej i 75% czasu, który spędziłem na redux (coś, co myślę, że biblioteka powinna robić), udało mi się zdobyć kilka aplikacji dla przedsiębiorstw idę od razu.
Działa również z tym samym narzędziem redux. To dobry artykuł, który obejmuje niektóre korzyści.
Tak więc dla każdego, kto przybył do tego wpisu SO szukając „prostszego redux”, polecam wypróbowanie go jako prostej alternatywy dla redux ze wszystkimi zaletami i 1/4 płyty głównej.
źródło
Zgodnie z tym artykułem: https://medium.freecodecamp.org/a-realworld-comparison-of-front-end-frameworks-with-benchmarks-2019-update-4be0d3c78075
Lepiej używaj MobX do zarządzania danymi w swojej aplikacji, aby uzyskać lepszą wydajność, a nie Redux.
źródło