kstack-tanstack-query
Installation
SKILL.md
kstack-tanstack-query
TanStack Query の hooks を書くときの規約。理由を理解した上で適用すること。package の新設は kstack-monorepo、責務の書き方は kstack-readme、useQuery の読み込み中の判定(useSuspenseQuery を使わない理由)は kstack-react、Hono の型付きクライアントは kstack-hono の SKILL を参照。
API・認証の client を呼ぶ hooks は app に書かず、hooks を配る package に置く
API を呼ぶ useQuery・useMutation と、その queryKey・queryFn・mutationFn は app に書かない。API の package ごとに hooks を配る package(@acme/api なら @acme/api-query)を作り、API の route 1 つにつき hook を 1 つ置く。better-auth など認証ライブラリの client(getSession・signOut)を包む hooks も同じく、@acme/auth-query のような package に置き、client は Provider から受け取る。app の hook はそれを呼んで、結果を表示の形に整えるだけにする。
// Bad: app の hook が queryKey と route の呼び出しを持っている
export function useTodoList() {
const { data } = useQuery({
queryKey: ["todos"],
queryFn: () => apiClient.api.todos.$get().then((res) => res.json()),
});
// ...data を表示の形に整えて返す
}