Przejrzałem definicje dwóch takich jak:
Czyste funkcje to takie, które nie próbują zmieniać swoich danych wejściowych i zawsze zwracają ten sam wynik dla tych samych danych wejściowych.
Przykład
function sum(a, b) {
return a + b;
}
A funkcja zanieczyszczona to taka, która zmienia własne dane wejściowe.
Przykład
function withdraw(account, amount) {
account.total -= amount;
}
Definicje i fragmenty kodu zaczerpnięte z oficjalnych dokumentów ReactJs .
Czy ktoś może mi teraz powiedzieć, jak mogę popełnić błędy w React / Redux , aby używać nieczystych funkcji tam, gdzie wymagane są czyste funkcje?
javascript
reactjs
redux
MuhammadUmarFarooq
źródło
źródło
window.getElementById
itp., Więc uruchomienie tej samej funkcji z tymi samymi parametrami może mieć różne wyniki w zależności od skutków ubocznych. W takim przypadku redux nie powiodło się.Odpowiedzi:
Reakcja i
Redux
obie potrzebują czystych funkcji w połączeniu z niezmiennością do działania w przewidywalny sposób.Jeśli nie zastosujesz się do tych dwóch rzeczy, aplikacja będzie zawierała błędy, z których najczęściej
React/Redux
nie można śledzić zmian i nie można ich ponownie renderować postate/prop
wprowadzeniu zmian.Jeśli chodzi o React, rozważ następujący przykład:
Stan jest utrzymywany przez obiekt stanu, który tylko dodał właściwość. Ta aplikacja renderuje właściwość aplikacji. Nie zawsze powinien renderować stan, gdy coś się dzieje, ale powinien sprawdzać, czy nastąpiła zmiana w obiekcie stanu.
W ten sposób mamy funkcję efektów,
pure function
której używamy, aby wpływać na nasz stan. Widzisz, że zwraca nowy stan, gdy stan ma zostać zmieniony, i zwraca ten sam stan, gdy modyfikacja nie jest wymagana.Mamy również
shouldUpdate
funkcję, która sprawdza za pomocą operatora ===, czy stary stan i nowy stan są takie same.Aby popełnić błędy w zakresie React, możesz w rzeczywistości wykonać następujące czynności:
Możesz także popełniać błędy, ustawiając stan bezpośrednio i nie używając
effects
funkcji.Powyższe nie powinno być wykonane i
effects
należy użyć tylko funkcji do aktualizacji stanu.Pod względem React nazywamy
effects
jakosetState
.W przypadku Redux:
combineReducers
Narzędzie Redux sprawdza zmiany referencyjne.connect
Metoda React-Redux generuje komponenty, które sprawdzają zmiany odniesienia zarówno dla stanu głównego, jak i zwracanych wartości zmapState
funkcji, aby sprawdzić, czy zawinięty komponent rzeczywiście musi się ponownie renderować.pure functions
bez skutków ubocznych, aby można było poprawnie przeskakiwać między różnymi stanami.Możesz łatwo złamać powyższe trzy, używając nieczystych funkcji jako reduktorów.
Poniżej zaczerpnięto bezpośrednio z dokumentów redux:
Nazywa się to reduktorem, ponieważ jest to typ funkcji, do której należy przekazać
Array.prototype.reduce(reducer, ?initialValue)
.Bardzo ważne jest, aby reduktor pozostał czysty. Rzeczy, których nigdy nie powinieneś robić wewnątrz reduktora:
Biorąc pod uwagę te same argumenty, powinien obliczyć następny stan i zwrócić go. Bez niespodzianek. Bez skutków ubocznych. Brak wywołań API. Bez mutacji. Tylko kalkulacja.
źródło
Mówiąc wprost, państwo nie może być zmutowane. Nowa instancja stanu powinna być zwracana za każdym razem, gdy zachodzi taka zmiana
Ten kod jest nieprawidłowy:
Ten kod, gdy został napisany jako czysta funkcja poniżej, Zwraca nową instancję tablicy, która nie modyfikuje samej tablicy. To jest powód, dla którego powinieneś używać biblioteki typu immmer do obsługi niezmienności
źródło
Możesz sprawić, że czyste funkcje będą nieczyste, dodając wywołania API lub pisząc kody, które powodują skutki uboczne.
Czyste funkcje powinny zawsze być trafne i zrozumiałe i nie powinny wymagać od ciebie odnoszenia 3 lub 4 innych funkcji, aby zrozumieć, co się dzieje.
W przypadku React / Redux
Nie należy tego robić . Wszystko, czego potrzebuje funkcja Connect lub funkcja reduktora, musi być dostarczone przez argument lub zapisane w ramach tej funkcji. Nigdy nie powinien dostać się z zewnątrz.
źródło