2016-04-14 13 views
15

Mam kilka zapytań ajaxowych, które nie bezpośrednio manipulują stanem mojej aplikacji. W aplikacji reag/redux jest to konieczne (lub czy istnieje jakakolwiek korzyść) do wysłania akcji dla tych żądań ajax zamiast po prostu wysłać żądanie ajax bezpośrednio w komponencie?Czy mogę wysłać wywołanie AJAX w React i Redux bez twórców i reduktorów akcji?

Aby uprościć mój scenariusz, zasadniczo mam listę obiektów w moim stanie redux. Korzystam z formularza, aby opublikować nowy obiekt w bazie danych, po pomyślnym wysłaniu przekierowuję do strony listy, na której wysyłane jest żądanie GET, a lista jest pobierana, a stan jest aktualizowany.

Wywołanie AJAX, aby opublikować nowy obiekt, nie wpływa bezpośrednio na mój stan.

Zespół pracuję z przeżywa pełne 3 kroku Redux async kroki ex: 'FETCH_REQUESTED', 'FETCH_SUCCESS', 'FETCH_FAIL' wraz z odpowiednimi reduktorów dla wszystkich żądań AJAX i jest to duży kłopot, aby dodać więcej i reduktory don wydaje się mieć sens.

Odpowiedz

33

Możesz całkowicie wysyłać połączenia AJAX bezpośrednio z komponentów!

Redux to narzędzie do udostępniania współdzielonego stanu globalnie dostępnego dla wielu komponentów i zmienianego w przewidywalny sposób. W każdym razie, gdy nie uznasz tego za konieczne, nie rób tego.

Utrzymywanie wywołań AJAX w twórcach akcji jest wygodne, gdy różne komponenty wysyłają te same żądania interfejsu API, a następnie zmieniają stan w podobny sposób. Jest to również wygodne, jeśli chcesz uniknąć odpalania żądania, gdy dostępne są już jakieś dane z pamięci podręcznej, i chcesz zachować takie sprawdzenia w jednym miejscu, a nie rozproszone w komponentach.

Powiedziałeś, że Redux dotyczy tylko tego, w jaki sposób aktualizowany jest stan globalny, i jeśli potrzebujesz tylko żądania AJAX z jakiegoś komponentu, nie musisz pisać twórcy działania lub reduktora, chyba że go znajdziesz wygodna.

Ogólnie rzecz biorąc, Redux (i Flux) jest to, co można rozważyć refaktoryzacji kodu do, gdy masz wiele skomplikowanych składników; nie to, z czym powinieneś zacząć każdy komponent. Możesz używać tylko tych części, których potrzebujesz (np. Tylko synchroniczne), lub nawet w niektórych przypadkach całkowicie tego unikać (np. Zwijany panel nie musi przechowywać swojego stanu w magazynie). Używaj go tylko wtedy, gdy rozumiesz konkretne korzyści, jakie daje ci w danej sytuacji, nigdy "na wszelki wypadek" lub dlatego, że jest popularny.

Zobacz także my answer to “How do dispatch a Redux action with a timeout?”

Aby rozwiązać swój konkretny przykład, możesz chcieć użyć Redux na to, czy używasz korzyści Redux zapewnia: Może wysyłką akcję zaktualizować formularz optymistycznie i wyświetlenie nowej listy prawo z dala i scal go z pobraną listą, gdy jest dostępna, aby interakcja wydawała się natychmiastowa. To jest przypadkiem użycia twórców akcji asynchronicznych. Jeśli nie patrzysz na tego rodzaju złożoność UX, nie jestem pewien, czy Redux jest w ogóle potrzebny.

+0

do odpowiedzi z odpowiedzią Dana Abramova - możesz chcieć użyć - https: // github.com/gavriguy/react-indie to składnik (po prostu stworzony) stworzony specjalnie dla niezależnych komponentów (takich jak widgety), których nie chcesz łączyć ze stanem globalnym według projektu. – Gavriguy

+0

@DanAbramov to tylko pytanie: jeśli nie umieścisz zapadniętego panela w sklepie, nie będziesz czerpać korzyści z podróży w czasie i ponownego ładowania hot pack w sieci Web, prawda? – Buzinas

+0

Tak, ale jak często spędzasz czas na debugowaniu zwijanej logiki panelu? ;-) –

Powiązane problemy