0Pricing
React Academy · Lekcja

Odczytywanie i zapisywanie atomów za pomocą useAtom

Używać useAtom, useAtomValue i useSetAtom do odczytywania i aktualizowania atomów w całym drzewie komponentów

Odczytywanie i zapisywanie atomów za pomocą useAtom to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

useAtom: główny hook

useAtom(someAtom) zwraca [value, setter], odwzorowując API useState. value to bieżący stan atomu, a setter go aktualizuje. Należy używać tego hooka, gdy komponent zarówno odczytuje atom, jak i go zapisuje.

setter przyjmuje albo nową wartość, albo funkcję aktualizującą: setCount(c => c + 1).

useAtomValue: dostęp tylko do odczytu

useAtomValue(someAtom) zwraca wyłącznie bieżącą wartość, bez funkcji setter. Należy używać go w komponentach przeznaczonych wyłącznie do wyświetlania, które odczytują stan, ale nigdy go nie modyfikują.

Ponieważ komponent nie przechowuje referencji do funkcji setter, intencja jest jasno udokumentowana w kodzie: ten komponent służy wyłącznie do odczytu.

useSetAtom: dostęp tylko do zapisu

useSetAtom(someAtom) zwraca wyłącznie funkcję setter. Co istotne, nie subskrybuje komponentu wartości atomu. Komponent nigdy nie renderuje się ponownie, gdy atom się zmienia.

Należy używać go w komponentach obsługujących wyłącznie akcje, takich jak przyciski, które wysyłają zmiany stanu, ale nie wyświetlają żadnych pochodnych elementów interfejsu.

Dlaczego useSetAtom ma znaczenie dla wydajności

Komponent, który wywołuje useSetAtom(countAtom) w celu zwiększenia licznika, nigdy nie renderuje się ponownie, gdy countAtom się zmienia, ponieważ nie subskrybuje jego wartości. Ponownie renderuje się tylko komponent wyświetlający licznik.

To prosta, ale skuteczna optymalizacja: należy oddzielić komponenty zapisujące od odczytujących, aby zapobiec kaskadowemu ponownemu renderowaniu.

atomWithStorage do utrwalania stanu

Należy zaimportować atomWithStorage z jotai/utils. Używa się go dokładnie tak jak atom(), ale jako pierwszy argument przekazuje się klucz przechowywania: atomWithStorage('theme', 'light'). Atom automatycznie synchronizuje się z localStorage.

Po ponownym załadowaniu strony atom pobiera stan z localStorage. Wszystkie komponenty odczytujące atom natychmiast otrzymują utrwaloną wartość.

Resetowanie atomWithStorage

Symbol RESET z jotai/utils można przekazać funkcji setter atomu atomWithStorage: setter(RESET). Spowoduje to wyczyszczenie wpisu w localStorage i przywrócenie atomu do jego wartości początkowej.

Jest to przydatne podczas wylogowywania lub w przypadku przycisków resetujących ustawienia do wartości domyślnych na stronach ustawień.

Rodziny atomów za pomocą atomFamily

atomFamily z jotai/utils tworzy fabrykę zwracającą sparametryzowany atom. Na przykład atomFamily(id => atom(null)) tworzy osobny atom dla każdego przekazanego unikatowego id.

Jest to idealne rozwiązanie dla stanu poszczególnych elementów, takiego jak selectedAtom(itemId) lub expandedAtom(rowId), bez konieczności zarządzania pojedynczym dużym atomem zawierającym mapę.

Czyszczenie rodziny atomów

Rodziny atomów mogą rosnąć bez ograniczeń, jeśli kumulują się identyfikatory. Należy użyć atomFamily.setShouldRemove((createdAt, param) => ...), aby zdefiniować predykat czyszczenia, którego Jotai używa przy podejmowaniu decyzji o usunięciu nieaktualnych elementów rodziny.

W przypadku list, do których elementy są dodawane i z których są usuwane, należy zawsze czyścić wpisy rodziny atomów po usunięciu elementów, aby uniknąć wycieków pamięci.

Jotai DevTools

Pakiet jotai-devtools udostępnia wizualny panel zawierający listę wszystkich aktywnych atomów i ich bieżących wartości. Należy go zainstalować, opakować aplikację w DevTools i sprawdzać stan atomów w czasie rzeczywistym.

Każda aktualizacja atomu jest rejestrowana wraz z poprzednią i następną wartością, co ułatwia debugowanie złożonych interakcji między atomami.

Przykład selektywnego ponownego renderowania

Na dużej liście komponent ListContainer może używać useSetAtom(selectedIdAtom) do aktualizowania zaznaczenia bez subskrybowania selectedIdAtom. Gdy zaznaczenie się zmienia, ponownie renderują się tylko poszczególne komponenty ListItem wywołujące useAtomValue(selectedIdAtom).

Ten wzorzec dobrze skaluje się wraz ze wzrostem aplikacji: dodanie tysięcy elementów listy nie spowalnia aktualizacji zaznaczenia.

Łączenie trzech hooków

Należy wybrać hook odpowiadający potrzebom komponentu: useAtomValue do wyświetlania, useSetAtom do obsługi samych akcji, a useAtom, gdy potrzebne są oba te zastosowania. Tak zaprojektowane API sprawia, że odpowiedzialność komponentu jest od razu jasna.

Komponent pola formularza zazwyczaj używa useAtom, przycisk przesyłania formularza używa useSetAtom, a etykieta wyświetlająca licznik używa useAtomValue.

useSetAtom a useAtom

Jaka jest główna zaleta używania useSetAtom zamiast useAtom?

Podsumowanie lekcji

useAtom udostępnia zarówno wartość, jak i setter; useAtomValue udostępnia tylko wartość (subskrypcje odczytu); useSetAtom udostępnia tylko setter (brak ponownego renderowania przy zmianie wartości). atomWithStorage utrwala dane w localStorage i obsługuje RESET, a atomFamily tworzy atomy zależne od parametrów na potrzeby dynamicznych list.

Wybór właściwego hooka ogranicza niepotrzebne ponowne renderowania i jasno określa przeznaczenie komponentu.

Często zadawane pytania

Czy lekcja „Odczytywanie i zapisywanie atomów za pomocą useAtom” jest bezpłatna?

Tak — pełny tekst „Odczytywanie i zapisywanie atomów za pomocą useAtom” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Odczytywanie i zapisywanie atomów za pomocą useAtom”?

Używać useAtom, useAtomValue i useSetAtom do odczytywania i aktualizowania atomów w całym drzewie komponentów Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Odczytywanie i zapisywanie atomów za pomocą useAtom”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Atomy: jednostka stanu w Jotai
  2. Odczytywanie i zapisywanie atomów za pomocą useAtom
  3. Atomy pochodne i asynchroniczne
  4. Jotai a Zustand a Context: kiedy czego używać
← Powrót do React Academy