Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カオナビに Suspenseを導入するまで / The Road to Suspense at...

カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi

2026年5月9日開催の「フロントエンドカンファレンス名古屋 2026」で登壇した際の発表資料です。
https://fec-nagoya-org.github.io/2026/
#fec_nagoya

More Decks by 株式会社カオナビ

Other Decks in Technology

Transcript

  1. Suspense © kaonavi, inc. 6 React 18の目玉機能といえばSuspense。 ✅ データ取得を宣言的に書いて設計改善 ✅

    トランジションと組み合わせてUX改善 ✅ Async Reactの中核であり、将来性◎
  2. Suspense導入計画 © kaonavi, inc. 8 導入前の状況 : TanStack Query (v4)

    を利用 選択肢: 🤔 TanStack Queryをv5に上げる(useSuspenseQuery)
  3. Suspense導入計画 © kaonavi, inc. 9 導入前の状況 : TanStack Query (v4)

    を利用 選択肢: 🤔 TanStack Queryをv5に上げる(useSuspenseQuery)
  4. Suspense導入計画 © kaonavi, inc. 11 導入前の状況 : TanStack Query (v4)

    を利用 選択肢: 🤔 TanStack Queryをv5に上げる 🤔 SWRとか別のライブラリを入れる 🤔 ライブラリに頼らず自作する
  5. 実際に採った選択肢 © kaonavi, inc. 13 自前実装のフック useSuspenseGetRequest を実装。 ただし、コア部分にjotaiを利用。 ✅

    jotaiによるSuspense対応 ✅ 見た目は従来のフックっぽい感じ (useSuspenseGetRequestに行き着くまで紆余曲折あったが省略)
  6. useSuspenseGetRequest使い方 © kaonavi, inc. 14 // コンポーネント外 const requestStore =

    createGetRequestStore< Data, Params >(); // コンポーネント内 const { data } = useSuspenseGetRequest({ requestFn, variables, enabled, requestStore, });
  7. useSuspenseGetRequest使い方 © kaonavi, inc. 15 // コンポーネント外 const requestStore =

    createGetRequestStore< Data, Params >(); // コンポーネント内 const { data } = useSuspenseGetRequest({ requestFn, variables, enabled, requestStore, }); よくあるデータ取得 フック感のある API
  8. useSuspenseGetRequest使い方 © kaonavi, inc. 16 // コンポーネント外 const requestStore =

    createGetRequestStore< Data, Params >(); // コンポーネント内 const { data } = useSuspenseGetRequest({ requestFn, variables, enabled, requestStore, }); よくあるデータ取得 フック感のある API コンポーネント外でストアを定義 jotaiのatomがこの中にある。 他のライブラリで言う  query keyと同等の概念。