Powiedz, że mam prosty przełącznik:
Kiedy klikam przycisk, składnik Kolor zmienia się z czerwonego na niebieski
Mogę osiągnąć ten wynik, robiąc coś takiego.
index.js
Button: onClick={()=>{dispatch(changeColor())}}
Color: this.props.color ? blue : red
container.js
connect(mapStateToProps)(indexPage)
action_creator.js
function changeColor(){
return {type: 'CHANGE_COLOR'}
}
reduktor.js
switch(){
case 'CHANGE_COLOR':
return {color: true}
ale to jest cholernie dużo kodu do napisania dla czegoś, co mógłbym osiągnąć w 5 sekund z jQuery, niektórymi klasami i niektórymi css ...
Więc myślę, że tak naprawdę pytam, co ja tu robię źle?
javascript
reactjs
redux
l2silver
źródło
źródło
Odpowiedzi:
Redux jest przeznaczony głównie dla „stanu aplikacji”. To znaczy wszystko, co jest związane z logiką aplikacji. Widok zbudowany na nim jest odbiciem tego stanu, ale nie musi wyłącznie używać tego kontenera stanu do wszystkiego, co robi.
Wystarczy zadać następujące pytania: Czy ten stan ma znaczenie dla reszty aplikacji? Czy inne części aplikacji będą zachowywać się inaczej w zależności od tego stanu? W wielu drobnych przypadkach tak nie jest. Rozwiń menu: Fakt, że jest otwarty lub zamknięty, prawdopodobnie nie będzie miał wpływu na inne części aplikacji. Więc podłączenie go do twojego sklepu to prawdopodobnie przesada. Z pewnością jest to ważna opcja, ale tak naprawdę nie zapewnia żadnych korzyści. Lepiej jest używać
this.state
i nazywać to codziennie.W twoim konkretnym przykładzie, czy kolor tego przycisku jest przełączany, aby wpłynąć na inne części aplikacji? Jeśli jest to jakiś globalny przełącznik włączania / wyłączania dla większej części aplikacji, to zdecydowanie należy do sklepu. Ale jeśli po prostu przełączasz kolor przycisku po kliknięciu przycisku, możesz pozostawić stan koloru zdefiniowany lokalnie. Akcja kliknięcia przycisku może mieć inne efekty, które wymagają wysłania akcji, ale jest to niezależne od prostego pytania, jakiego koloru powinien być.
Ogólnie staraj się, aby stan aplikacji był jak najmniejszy. Nie musisz tam wszystkiego wrzucać . Rób to, kiedy musisz, albo warto coś tam zatrzymać. Lub jeśli ułatwi Ci to życie podczas korzystania z narzędzi deweloperskich. Ale nie przeciążaj zbytnio jego znaczenia.
źródło
Redux FAQ: Organizacja
Podaj, że ta część oficjalnego dokumentu redux dobrze odpowiedziała na twoje pytanie.
źródło
W celu podkreślenia świetnego linku dostarczonego przez @ AR7 i ponieważ ten link został przesunięty jakiś czas temu:
źródło
Tak, warto dążyć do przechowywania stanu wszystkich komponentów w Redux . Jeśli to zrobisz, skorzystasz z wielu funkcji Redux, takich jak debugowanie podróży w czasie i powtarzalne raporty o błędach. Jeśli tego nie zrobisz, te funkcje mogą być całkowicie bezużyteczne .
Za każdym razem, gdy nie zapiszesz zmiany stanu składnika w Redux, ta zmiana zostanie całkowicie utracona ze stosu zmian Redux, a interfejs użytkownika aplikacji nie będzie zsynchronizowany ze sklepem. Jeśli to nie jest dla Ciebie ważne, zadaj sobie pytanie, po co w ogóle używać Redux? Bez niej Twoja aplikacja będzie mniej złożona!
Ze względu na wydajność możesz chcieć wrócić do
this.setState()
czegokolwiek, co spowodowałoby wielokrotne wywołanie wielu działań. Na przykład: przechowywanie stanu pola wejściowego w Redux za każdym razem, gdy użytkownik wpisze klucz, może spowodować niską wydajność. Możesz rozwiązać ten problem, traktując to jak transakcję: gdy akcja użytkownika zostanie „zatwierdzona”, zapisz stan końcowy w Redux.Twój oryginalny post wspomina o tym, że sposób Redux to „piekielnie dużo kodu do napisania”. Tak, ale można używać abstrakcji dla typowych wzorców, takich jak stan komponentu lokalnego.
źródło
this.setState()
czydispatch(action...)
. Nie trzeba go używaćthis.setState()
wszędzie, ale kiedy trzeba, proponuję zamiast tego użyć Reduxa w 99% przypadków, wracając dothis.setState()
1% w oparciu o obawy dotyczące wydajności.