Skip to main content

react-query

TanStack Query ownership for kitcn cRPC queries, mutations, live Convex subscriptions, RSC preloading, cache keys, and bounded invalidation.

ソース情報

リポジトリ
udecode/kitcn
ソースの最終更新活動
2026年7月22日 12:16
検出された SKILL.md の言語
英語
スター
450
フォーク
34

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
description
TanStack Query ownership for kitcn cRPC queries, mutations, live Convex subscriptions, RSC preloading, cache keys, and bounded invalidation.
name
react-query
metadata
{"skiller":{"source":".agents/rules/react-query.mdc"}}
# TanStack Query And cRPC ## Default Use generated cRPC query and mutation options as the owner of query keys, functions, input typing, and result typing. Do not hand-build parallel keys or duplicate the transport contract in components. Convex-backed cRPC queries are live subscriptions unless the API explicitly documents a non-live path. A successful mutation normally updates subscribed queries through Convex; blind invalidation is redundant and can cause churn. ## Colocation - Keep a query in the smallest component or hook that owns its loading, empty, error, permission, and success states. - Hoist only when siblings share the same result or a route owns preload. - Keep presentation components data-agnostic when that improves reuse. - Use component colocation rules before inventing a feature-wide data layer. ## Query Pattern ```tsx const result = useQuery( crpc.projects.list.queryOptions({ workspaceId }), ); ``` Use `skipToken`, an explicit enabled condition, or the generated auth-aware option when required input or session authority is missing. Do not send fake identifiers to keep a hook unconditional. ## Mutation Pattern ```tsx const createProject = useMutation( crpc.projects.create.mutationOptions({ onSuccess: (project) => { router.push(`/projects/${project.id}`); }, }), ); ``` Own user feedback at the mutation boundary. Disable duplicate submission, surface the actual error, and preserve form input on failure. Do not invalidate a live cRPC query by habit. Invalidation is allowed only when the consumer is demonstrably non-subscribed, the source is HTTP/external, a manual cache entry was written, or a server-side/RSC snapshot needs a bounded refresh. Name that exception beside the code. ## RSC And Preload - Prefer server callers for server-owned rendering and authorization. - Use the package's supported preload/hydration path when a client component must adopt server-fetched data. - Never create a second query-key dialect for RSC. - Treat server snapshots and live client subscriptions as different lifetimes; document which one owns freshness. - Avoid importing client-only Query machinery into Convex functions or other server-only package entries. ## Cache Operations Use generated filters/options for `getQueryData`, `setQueryData`, cancellation, and invalidation. An optimistic update must define rollback and reconciliation with the live Convex result. If subscription delivery is fast enough, prefer pending UI over speculative cache mutation. ## Proof Test the owner, not TanStack Query itself: - query is skipped until required identity/input exists; - mutation pending/error/success states are honest; - live data changes without a redundant refetch; - bounded invalidation affects only the intended non-live key; - RSC hydration and client adoption use one key contract; - permission failures never render stale privileged data.
GitHubで見る