SetAtom
SetAtom 컴포넌트는 Jotai의 useSetAtom 훅과 동일한 인터페이스를 Props로 제공하며 선언적으로 사용할 수 있습니다.
props.atom
Jotai의 atom을 그대로 사용할 수 있습니다.
import { SetAtom } from '@suspensive/jotai'
import { atom } from 'jotai'
const switchAtom = atom(false)
const Example = () => (
<SetAtom atom={switchAtom}>
{(setCount) => (
<>
<button onClick={() => setCount(true)}>Set True</button>
<button onClick={() => setCount(false)}>Set False</button>
</>
)}
</SetAtom>
)Async Atom일 경우 프로미스(Promise)가 해결(resolve) 되기 전까지, 부모의 Suspense에게 Promise의 pending 상태를 위임합니다.
import { SetAtom } from '@suspensive/jotai'
import { Suspense } from '@suspensive/react'
import { atom } from 'jotai'
const request = async () => fetch('https://...').then((res) => res.json())
const baseAtom = atom(0)
const Example = () => (
<Suspense fallback={'pending...'}>
<SetAtom atom={baseAtom}>
{(setValue) => (
<>
{/* 프로미스(Promise)가 해결되기 전까지 Suspend가 발생됩니다. */}
<button onClick={() => setValue(request())}>request</button>
</>
)}
</SetAtom>
</Suspense>
)동기
<Atom/>의 동기와 같이 <SetAtom/> 또한, 상위 컴포넌트에서 명확하게 드러나지 않습니다. 하위에 선언된 컴포넌트가 내부적으로 어떤 Atom을 사용하고, Suspense를 발생할지 예상하기 어렵습니다.
수정된 날짜: