o ile rozumiem Redux, chodzi o utrzymanie całego stanu interfejsu w jednym sklepie (aby móc łatwo odtworzyć pewne stany i nie mieć żadnych skutków ubocznych). Możesz manipulować stanem poprzez wyzwalanie akcji, które wyzwalają reduktory.Jak przekazywać zmiany stanu interfejsu użytkownika między komponentami React a Redux?
Obecnie piszę małą aplikację podobną do bloga, w której można po prostu tworzyć i edytować posty. Mam okno tworzenia post, z grubsza metoda składnika App
render
zwraca coś takiego:
<div>
<AppBar ... />
<PostFormDialog
addPost={actions.addPost}
ref="postFormDialog" />
<PostList
posts={posts}
actions={actions} />
</div>
Moje pytanie brzmi: czy stan okna (otwarte lub zamknięte) będzie częścią obiektu państwowej składnika aplikacji? A zatem powinno otwierania i zamykania okna dialogowego być wywołane poprzez działania zamiast robić coś jak następuje:
onTriggerCreatePostDialog(e) {
this.refs.postFormDialog.show();
}
gdzie onTriggerCreatePostDialog
jest wyzwalany poprzez kliknięcie jakiegoś słuchacza na przycisk „Utwórz” lub tak.
Wydaje mi się to trochę dziwne, zrobić to poprzez działania, ponieważ wprowadza rodzaj "pośrednictwa".
Jednak zakładając, że chcę ponownie użyć okna dialogowego do akcji edycji, muszę mieć możliwość otwarcia okna dialogowego z elementów, które znajdują się głębiej w strukturze komponentu, na przykład ze składnika Post
, który jest elementem potomnym modelu PostList
składnik. Co mogę zrobić, to przekazać funkcję onTriggerCreatePostDialog
dół hierarchii poprzez właściwość props
, ale wydaje mi się kłopotliwe ...
Więc int koniec jest również o komunikacji między komponentami, które nie znajdują się w bezpośrednim rodzic-dziecko związek. Czy są inne opcje? Czy powinienem jakoś wykorzystać globalną magistralę zdarzeń? Jestem obecnie dość niepewny.
Załóżmy, że okno dialogowe nie jest modalne. Początkowo nie jest pokazywana, a jej stan jest zarządzany tak, jak proponujesz. Klikam przycisk, 'showDialog' staje się prawdą i pojawia się to okno dialogowe. Teraz, jeśli kliknę gdzieś indziej niż okno dialogowe, zostanie ono ponownie zamknięte, ale 'showDialog' nie zostanie odpowiednio zmanipulowane, chyba że wyraźnie zajmuję się tym przypadkiem w' PostFormDialog'. To tylko jeden przykład, w którym obsługa stanu okna staje się uciążliwa, moim zdaniem. Czy mimo to zrobiłbyś to tak? –
Jeśli chodzi o inteligentny komponent: czy na przykład rozsądne byłoby wprowadzenie innego inteligentnego komponentu do zarządzania stanem modalnego okna dialogowego? Zakładając, że dialog może być użyty do stworzenia nowego postu i edycji istniejących. Ponadto musisz obsłużyć takie rzeczy jak "czyszczenie" okna dialogowego po pomyślnym utworzeniu/edycji itd. –
to podejście będzie działać, ale będzie również łamać wszelkie animacje wyglądu/znikania dialogów, prawda? Ponieważ element nadrzędny został ponownie renderowany, okno dialogowe zostanie natychmiast usunięte z ekranu. Zastanawiam się, jakie jest najlepsze rozwiązanie tego problemu? –