Cache
Jotai는 리렌더링을 최적화하기 위한 기본 함수를 제공합니다.
이 라이브러리는 오직 "현재" 아톰 값만 유지하도록 설계되었으며, 이전 값은 캐싱하지 않습니다.
캐싱은 때때로 유용할 수 있습니다. 예를 들어, 비동기 아톰이 네트워크 요청을 트리거하는 경우, 응답을 캐싱하고 싶을 수 있습니다.
jotai-cache는 이러한 사용 사례를 돕기 위한 서드파티 라이브러리입니다.
설치
npm install jotai-cache
atomWithCache
atomWithCache(read, options): Atom
atomWithCache
는 캐시가 포함된 새로운 읽기 전용 아톰을 생성합니다.
파라미터
read: 읽기 전용 아톰을 정의하는 read 함수
options (선택 사항): 아톰의 동작을 커스터마이즈하기 위한 옵션 객체
옵션
size (선택 사항): 캐시 항목의 최대 크기.
shouldRemove (선택 사항): 캐시 항목을 제거할지 여부를 확인하는 함수.
areEqual (선택 사항): 아톰 값을 비교하는 함수.
예제
import { atom, useAtom } from 'jotai'import { atomWithCache } from 'jotai-cache'const idAtom = atom(1)const normalAtom = atom(async (get) => {const id = get(idAtom)const response = await fetch(`https://reqres.in/api/users/${id}?delay=1`)return response.json()})const cachedAtom = atomWithCache(async (get) => {const id = get(idAtom)const response = await fetch(`https://reqres.in/api/users/${id}?delay=1`)return response.json()})const NormalUser = () => {const [{ data }] = useAtom(normalAtom)return (<div><h1>User (normal atom)</h1><ul><li>ID: {data.id}</li><li>First name: {data.first_name}</li><li>Last name: {data.last_name}</li></ul></div>)}const CachedUser = () => {const [{ data }] = useAtom(cachedAtom)return (<div><h1>User (cached atom)</h1><ul><li>ID: {data.id}</li><li>First name: {data.first_name}</li><li>Last name: {data.last_name}</li></ul></div>)}const App = () => {const [id, setId] = useAtom(idAtom)return (<div>ID: {id}{' '}<button type="button" onClick={() => setId((c) => c - 1)}>Prev</button>{' '}<button type="button" onClick={() => setId((c) => c + 1)}>Next</button><hr /><Suspense fallback="Loading..."><CachedUser /></Suspense><hr /><Suspense fallback="Loading..."><NormalUser /></Suspense></div>)}