a very good jj gui
1# Rule: Discourage useEffect for data fetching
2# Detects fetch() or invoke() calls inside useEffect callbacks
3
4id: no-useeffect-data-fetching
5language: tsx
6severity: warning
7message: "useEffect with fetch/invoke is discouraged for data fetching. Use TanStack DB (useLiveQuery) or TanStack Query instead."
8note: |
9 Anti-patterns detected:
10 - useEffect(() => { fetch(...) }, [])
11 - useEffect(() => { invoke(...) }, [])
12 - useEffect(() => { (async () => { await fetch(...) })() }, [])
13
14 Preferred alternatives:
15 - useLiveQuery() for reactive data from TanStack DB collections
16 - useQuery() for server state that doesn't need local caching
17 - Batch loader pattern in db.ts for IPC calls
18
19rule:
20 pattern: useEffect($CALLBACK, $$$DEPS)
21 has:
22 stopBy: end
23 kind: call_expression
24 has:
25 kind: identifier
26 regex: "^(fetch|invoke)$"