react-doctor/query-no-query-in-effect

React Query manages refetching automatically via queryKey dependencies and the `enabled` option — manual refetch() in useEffect is usually unnecessary

  • Category: TanStack Query
  • Severity: warn
  • Source: oxlint-plugin-react-doctor
  • Framework: tanstack-query
  • Enabled when: framework=tanstack-query and capabilities=tanstack-query

Validation prompt

Use this to decide whether a fired diagnostic is real or a false positive.

Fires when a useEffect or useLayoutEffect callback contains a bare refetch() CallExpression — the callee must be a plain Identifier named refetch. Member access like query.refetch() or result.refetch() is NOT matched; only an aliased const { refetch } = useQuery(...) followed by refetch() inside the effect.

Fix prompt

Use this once validation confirms the diagnostic is real.

Delete the effect. Encode the trigger as part of queryKey (e.g. queryKey: ['user', userId]) so React Query refetches automatically when it changes, or toggle the enabled flag to gate the fetch. Reserve imperative refetch() for event handlers, not effects. https://tanstack.com/query/latest/docs/framework/react/guides/important-defaults