デモ

TanStack Query + useOptimistic

キャッシュライブラリとuseOptimisticの併用パターン

併用パターン
// TanStack Query でデータ取得
const { data: posts } = useQuery({ queryKey: ["posts"], queryFn: fetchPosts });

// useOptimistic で即時UI更新
const [optimisticPosts, addOptimistic] = useOptimistic(posts, updateFn);

// useMutation で楽観的更新
const mutation = useMutation({
  mutationFn: likePost,
  onMutate: async (postId) => {
    // 楽観的にUIを更新
    addOptimistic({ id: postId, increment: 1 });
  },
  onSuccess: () => {
    // キャッシュを再取得
    queryClient.invalidateQueries({ queryKey: ["posts"] });
  },
});

TanStack Query 単体

キャッシュ更新後にUI反映

+ useOptimistic

即座にUI更新

確認ポイント

  • TanStack Query単体: キャッシュ更新後にUIが反映(約0.8秒待ち)
  • + useOptimistic: 即座にUI更新、キャッシュは後から同期
  • • 両者を組み合わせることで、キャッシュの恩恵と即時反応を両立