Wpis z mikrobloga

#programowanie #react #it

Jest ponizsza funkcja ktora ma za zadanie zwalidować dane w formData. W tym celu mam drugi stan isError w ktorym bede zapsisywal wynik true jesli wejdzie do bloku if jesli warunek zostanie spelniony. Problem mam taki że wchodzi mi do bloku if bo console.logi sie w konsoli pojawiaja a stanu przez setIsError nie zmienia. Po prostu przelatuje po kodzie i nie zmienia stanu. Gdzie jest błąd którego nie widzę a ktory to powoduje?
https://pastebin.com/fsrghnz8
  • 18
Pamiętaj, że wszystkie settery w React są asynchroniczne, jeśli w ciele funkcji validateForm będziesz robił console.log(isError) to nie zobaczysz żadnych zmian. Zmiany tego stanu będą dopiero dostępne po wykonaniu się tej funkcji.
@cr6d: Nie wiem dlaczego, ale pierwsze co rzuciło mi się w oczy to kilkukrotne aktualizowanie stanu w danej funkcji. Na twoim miejscu bym spróbował stworzyć kopie zmiennej isError (lub zupełnie nową zmienną) i jej pola pozmieniać na true/false i na sam koniec zrobić jeden update. Nie wiem czy w najnowszych wersjach dodali "batchowanie" stanu w funkcjach (coś o tym gadali, ale nie wiem czy to w końcu jest), ale powinien być
wiem że jest asnychronicznie ale to nie był problem, własnie ogarnąłem sprawę. Kiedy pod rząd jest wywoływanych kilka zmian tego samego stanu jak u mnie w funkcji, react nie wywołuje tych setState za kzadym razem tylko robi to raz, mergując te setState i wywołuje się tylko ten ostatni efekt setState. Tak samo jakbys mial pod rzad setState(count +1): setState(count +1), to count nie bedize miało 3 , tylko 2,
@void_0: dokladnie jest tak jak mowisz wlasnie napisalem komentarz o tym, też na to wpadlem i zrobilem tak jak pisales ze robie kopie tego stanu, zmieniam ja w ifach a na koncu dopiero robie update stanu przez setIsError
@cr6d:

Kiedy pod rząd jest wywoływanych kilka zmian tego samego stanu jak u mnie w funkcji, react nie wywołuje tych setState za kzadym razem tylko robi to raz


a jakbys zrobil tak?

setIsError(prev => ({
...prev,
email: true,
}));
@Rufurege1: Spoko :) Ja dużo też nie mam, bo jedynie 4 lata. Po pewnym czasie (i po kilkudziesięciu jak nie po kilkuset XD review) człowiek już wyłapuje takie rzeczy i jest to już bardziej intuicja niż prześledzenie dokładnie każdej linijki. Trzeba czasu i wszystkiego da się nauczyć, powodzenia! ( ͡° ͜ʖ ͡°)
@cr6d:

wiem że jest asnychronicznie ale to nie był problem, własnie ogarnąłem sprawę. Kiedy pod rząd jest wywoływanych kilka zmian tego samego stanu jak u mnie w funkcji, react nie wywołuje tych setState za kzadym razem tylko robi to raz, mergując te setState i wywołuje się tylko ten ostatni efekt setState. Tak samo jakbys mial pod rzad setState(count +1): setState(count +1), to count nie bedize miało 3 , tylko 2,


Nie,