Wpis z mikrobloga

#react #programowanie
Aj nid help łans egen. Nie za bardzo rozumiem dlaczego fetchedFile jest nullowany przy rerenderze - przekazuję te pole jako props do wykorzystywanego "w środku" komponentu i w momencie jak setuję te pole to ten mój komponent wrapper odpala się od zera wraz z wartością fetchedFile ustawioną na null - co ciekawe reszta pól ma przywrócony poprzedni stan czyli np. initialized jest na true. Ktoś podpowie co tu #!$%@?łem?
Dominias - #react #programowanie
Aj nid help łans egen. Nie za bardzo rozumiem dlacz...

źródło: comment_1662391228JyHQh3tfvPRl5lk5GiSA0T.jpg

Pobierz
  • 24
  • Odpowiedz
@Dominias:
getMonitoringData powinien być useCallback'iem, sideEffect powinien być wywołany w useEffect z pustą tablicą deps (aby był wykonany raz) i zwracać funkcję czyszczącą setInterval.
  • Odpowiedz
@Dominias:

any any[] (°°

Nie za bardzo rozumiem, dlaczego do ` przekazujesz całą metodę sideEffect do fetchowania danych, skoro te dane i tak przekazujesz w propsach jako wynik metody getMonitoringData.

Tak jak przedmówca stwierdził, pobierz dane w
useEffect z pustym deps array i zrób clearInterval na return`.

BTW Ja bym zrobił z tego custom hooka.
  • Odpowiedz
  • 0
@NuncjuszPapieski w main component jest element który triggeruje request i ten sideEffect wywołuje się kiedy przychodzi response dla niego. Dlaczego zabijać interval? Te dane muszę pobierać co X czasu
  • Odpowiedz
@nightman: @pustko: tutaj macie uproszczony przykład, na szybko robiłem wiec ten counter bez sensu, chodzi o to ze na kliknięcie buttona odpala sie interwał i powinien wartość podnosić co 5 za każdym razem, a on po prostu bierze init value czyli 0 i dodaje 5, wiec za kazdym razem jest ustawiana wartosc 5. W konsoli mozecie zobaczyc ze iteracja rosnie co 5s prawidlowo: https://stackblitz.com/edit/react-starter-typescript-syez6p?file=Home.tsx
  • Odpowiedz
@nightman: @pustko: ok udało mi się dobrze ukazać mój problem, spójrzcie na console.log który ma mi zwrócić aktualną wartośc - cały czas zwraca 0. Ten sam problem mam w swojej apce gdzie nie zwraca mi aktualnej wartości tylko null (inicjującą wartość), a chcę mieć do niej dostęp żeby porównać stary i nowy result.
  • Odpowiedz
@Dominias: Btw. useRef możesz tez wykorzystać do trzymania wartości zmiennej initialize, żeby zachowac ja pomiędzy renderami. Jak wrócę do domu to przyjrzę się dokładniej Twojemu przykładowi i problemowi
  • Odpowiedz
@Dominias: a może wytłumacz co Ty tu chcesz osiągnąć? Bo nie za bardzo rozumiem, ale widzę ze na na początku po wyrenderowaniu komponentu chcesz odpalić funkcje, która na intervalu pobiera dane. I chcesz tez aby user po kliknięciu na jakiś element odpalił te sama funkcje, czyli ponownie odpalił interval z pobieraniem danych?

Nie wiem czy dobrze zrozumiałem.
  • Odpowiedz