• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed react, zmiana stanu działa jeżeli użyję operatora przypisania

Object Storage Arubacloud
0 głosów
194 wizyt
pytanie zadane 6 września 2020 w JavaScript przez rob Bywalec (2,440 p.)
zamknięte 10 września 2020 przez rob

Witam

Mam taki kod

  const [startDate, setStartDate] = useState(null);
    const [newTask, setNewTask] = useState(initTask)


    const handleChange = (e) => {
        if (e.target.id === 'newTask') {
            // newTask.title = e.target.value
            setNewTask({
                ...newTask, title: e.target.value
            })

dlaczego mi to nie działa? jeżeli odkomentuję 4 linijkę od końca a zakomentuję 3 ostatnie kod działa, ale nie powinno się zmieniać stanu poprzez operator przypisania

proszę o pomoc

komentarz zamknięcia: Znalazłem rozwiązanie
komentarz 6 września 2020 przez ScriptyChris Mędrzec (190,190 p.)

Funkcja App jest cyklicznie wołana w setInterval z komponentu countDown, dlatego w konsoli widać spam console.log-ów.

Nie wiem dlaczego aktualizacja state dla newTask nie uwzględnia property title, bo o dziwo property id (ustawiane na końcu funkcji handleChange) jest uwzględniane.

Sprawdziłem w debuggerze i nawet użycie setNewTask z funkcją aktualizującą stan nie pomaga, więc nie wiem o co chodzi. Może to kwestia specyficznego użycia setInterval z Reduxem, albo jakiś corner case lub niezrozumienie Reacta.


Sprawdzałeś, czy aktualizacja state-u newTask w pozostałych ifach działa - tzn. czy wypełniając pozostałe pola formularza, to jest brane pod uwagę w state?

komentarz 6 września 2020 przez rob Bywalec (2,440 p.)

i tu jest cała zagwózdka bo

wszystkie trzy point, flag i id działają stan się zmienia a

title, notes, alarm.setAlarm i alarm.iconOn nie działają 

i wszystkie są w tym samym handleChange !!!! skąd taka wybiórczość?! frown

komentarz 6 września 2020 przez ScriptyChris Mędrzec (190,190 p.)

Szczerze mówiąc nie wiem. Próbując modyfikować kod przez debugger, zauważyłem że dowolna inna zmiana w pliku App.js nie powoduje efektu, bo to zmiany na source mapie, a oryginalny kod pozostaje bez zmian.

Spróbuj aktualizować stan przez callback, na zasadzie:

setNewTask((previousState) => ({
  ...previousState, title: e.target.value
}));

Jeśli to nie pomoże, to nie wiem o co chodzi. Niemniej, odświeżanie całego komponentu w setInterval może nie być dobrym pomysłem. Raczej powinno się odświeżać określone wartości, np. licznik lub czas (jeśli to zegarek).

komentarz 6 września 2020 przez rob Bywalec (2,440 p.)
w każdym razie bardzo dzięki za poświęcony czas
komentarz 10 września 2020 przez rob Bywalec (2,440 p.)

wiem w czym problem!!! 

wystarczyło przenieść tę linijkę

setNewTask({
            ...newTask, id: new Date().getTime()
        })

w miejsce gdzie będzie uruchamiana tylko raz ponieważ, wcześniej była wywoływana bezwarunkowo za każdym wywołaniem handleChnage i to wszystko mieszało...

Podobne pytania

0 głosów
1 odpowiedź 281 wizyt
pytanie zadane 29 stycznia 2021 w JavaScript przez sKodowany Obywatel (1,150 p.)
0 głosów
0 odpowiedzi 85 wizyt
pytanie zadane 2 sierpnia 2020 w JavaScript przez rob Bywalec (2,440 p.)
+1 głos
1 odpowiedź 359 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...