Recoilでsuspend状態のノードが解決されるまで待つ
何らかのコールバックの中で手続き的に処理したいときに困るので以下のようなケースで役に立つ code:tsx
const options = atom(...)
// optionsを読み込んでデータフェッチする的なselector
const query = selector(...)
const reload = useRecoilCallback(({ snapshot, set }) async (newOptions) => {
// 依存しているqueryのデータフェッチが走る = suspend状態になる
set(options, newOptions)
// waitForAllSettledはqueryのsuspendを待ってくれる
// 戻り値はLoadable
const result = await snapshot.getPromise(waitForAllSettled(query)) // resultにはqueryのsuspendが解決された後の最新値が入ってる
return result.getValue()
}
koushisa.icon
正直めんどくさいよね