Episode 2 — React Frontend Architecture NextJS / 2.12 — Server State and API Integration
2.12.a — fetch API integration in React
Learning outcomes
- Fetch JSON in
useEffectwith correct dependencies and cleanup. - Use
AbortControllerto cancel in-flight requests on unmount or param change. - Map HTTP results to typed success and error shapes.
Minimal useEffect fetch
import { useEffect, useState } from "react";
type Post = { id: string; title: string };
export function PostDetails({ id }: { id: string }) {
const [data, setData] = useState<Post | null>(null);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const ac = new AbortController();
async function run() {
setError(null);
try {
const res = await fetch(`/api/posts/${id}`, { signal: ac.signal });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const json = (await res.json()) as Post;
setData(json);
} catch (e) {
if ((e as Error).name === "AbortError") return;
setError((e as Error).message);
}
}
void run();
return () => ac.abort();
}, [id]);
if (error) return <p>{error}</p>;
if (!data) return <p>Loading…</p>;
return <h1>{data.title}</h1>;
}
Why cancellation matters
Users navigate quickly. Without abort (or an equivalent), you risk:
- applying a slow response over a new route’s state
- memory leaks and confusing dev-only warnings
Beyond manual fetch
TanStack Query implements deduplication, caching, retries, and background refetching—this chapter’s baseline teaches the HTTP + effect fundamentals those tools build on.
Appendix — Scenario bank (basic → advanced)
Flashcard rhythm: symptom → cause → fix → phrase for interviews.
API0-001 — fetch integration #1
- Level: Beginner
- Symptom: stale UI or spinner stuck after
13ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-002 — fetch integration #2
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
26ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-003 — fetch integration #3
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
39ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-004 — fetch integration #4
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
52ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-005 — fetch integration #5
- Level: Advanced
- Symptom: stale UI or spinner stuck after
65ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-006 — fetch integration #6
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
78ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-007 — fetch integration #7
- Level: Beginner
- Symptom: stale UI or spinner stuck after
91ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-008 — fetch integration #8
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
104ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-009 — fetch integration #9
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
117ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-010 — fetch integration #10
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
130ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-011 — fetch integration #11
- Level: Advanced
- Symptom: stale UI or spinner stuck after
143ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-012 — fetch integration #12
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
156ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-013 — fetch integration #13
- Level: Beginner
- Symptom: stale UI or spinner stuck after
169ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-014 — fetch integration #14
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
182ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-015 — fetch integration #15
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
195ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-016 — fetch integration #16
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
8ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-017 — fetch integration #17
- Level: Advanced
- Symptom: stale UI or spinner stuck after
21ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-018 — fetch integration #18
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
34ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-019 — fetch integration #19
- Level: Beginner
- Symptom: stale UI or spinner stuck after
47ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-020 — fetch integration #20
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
60ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-021 — fetch integration #21
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
73ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-022 — fetch integration #22
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
86ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-023 — fetch integration #23
- Level: Advanced
- Symptom: stale UI or spinner stuck after
99ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-024 — fetch integration #24
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
112ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-025 — fetch integration #25
- Level: Beginner
- Symptom: stale UI or spinner stuck after
125ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-026 — fetch integration #26
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
138ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-027 — fetch integration #27
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
151ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-028 — fetch integration #28
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
164ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-029 — fetch integration #29
- Level: Advanced
- Symptom: stale UI or spinner stuck after
177ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-030 — fetch integration #30
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
190ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-031 — fetch integration #31
- Level: Beginner
- Symptom: stale UI or spinner stuck after
3ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-032 — fetch integration #32
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
16ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-033 — fetch integration #33
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
29ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-034 — fetch integration #34
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
42ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-035 — fetch integration #35
- Level: Advanced
- Symptom: stale UI or spinner stuck after
55ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-036 — fetch integration #36
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
68ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-037 — fetch integration #37
- Level: Beginner
- Symptom: stale UI or spinner stuck after
81ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-038 — fetch integration #38
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
94ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-039 — fetch integration #39
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
107ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-040 — fetch integration #40
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
120ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-041 — fetch integration #41
- Level: Advanced
- Symptom: stale UI or spinner stuck after
133ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-042 — fetch integration #42
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
146ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-043 — fetch integration #43
- Level: Beginner
- Symptom: stale UI or spinner stuck after
159ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-044 — fetch integration #44
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
172ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-045 — fetch integration #45
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
185ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-046 — fetch integration #46
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
198ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-047 — fetch integration #47
- Level: Advanced
- Symptom: stale UI or spinner stuck after
11ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-048 — fetch integration #48
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
24ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-049 — fetch integration #49
- Level: Beginner
- Symptom: stale UI or spinner stuck after
37ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-050 — fetch integration #50
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
50ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-051 — fetch integration #51
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
63ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-052 — fetch integration #52
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
76ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-053 — fetch integration #53
- Level: Advanced
- Symptom: stale UI or spinner stuck after
89ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-054 — fetch integration #54
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
102ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-055 — fetch integration #55
- Level: Beginner
- Symptom: stale UI or spinner stuck after
115ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-056 — fetch integration #56
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
128ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-057 — fetch integration #57
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
141ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-058 — fetch integration #58
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
154ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-059 — fetch integration #59
- Level: Advanced
- Symptom: stale UI or spinner stuck after
167ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-060 — fetch integration #60
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
180ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-061 — fetch integration #61
- Level: Beginner
- Symptom: stale UI or spinner stuck after
193ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-062 — fetch integration #62
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
6ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-063 — fetch integration #63
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
19ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-064 — fetch integration #64
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
32ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-065 — fetch integration #65
- Level: Advanced
- Symptom: stale UI or spinner stuck after
45ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-066 — fetch integration #66
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
58ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-067 — fetch integration #67
- Level: Beginner
- Symptom: stale UI or spinner stuck after
71ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-068 — fetch integration #68
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
84ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-069 — fetch integration #69
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
97ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-070 — fetch integration #70
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
110ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-071 — fetch integration #71
- Level: Advanced
- Symptom: stale UI or spinner stuck after
123ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-072 — fetch integration #72
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
136ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-073 — fetch integration #73
- Level: Beginner
- Symptom: stale UI or spinner stuck after
149ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-074 — fetch integration #74
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
162ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-075 — fetch integration #75
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
175ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-076 — fetch integration #76
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
188ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-077 — fetch integration #77
- Level: Advanced
- Symptom: stale UI or spinner stuck after
1ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-078 — fetch integration #78
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
14ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-079 — fetch integration #79
- Level: Beginner
- Symptom: stale UI or spinner stuck after
27ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-080 — fetch integration #80
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
40ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-081 — fetch integration #81
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
53ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-082 — fetch integration #82
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
66ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-083 — fetch integration #83
- Level: Advanced
- Symptom: stale UI or spinner stuck after
79ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-084 — fetch integration #84
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
92ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-085 — fetch integration #85
- Level: Beginner
- Symptom: stale UI or spinner stuck after
105ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-086 — fetch integration #86
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
118ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-087 — fetch integration #87
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
131ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-088 — fetch integration #88
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
144ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-089 — fetch integration #89
- Level: Advanced
- Symptom: stale UI or spinner stuck after
157ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-090 — fetch integration #90
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
170ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-091 — fetch integration #91
- Level: Beginner
- Symptom: stale UI or spinner stuck after
183ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-092 — fetch integration #92
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
196ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-093 — fetch integration #93
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
9ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-094 — fetch integration #94
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
22ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-095 — fetch integration #95
- Level: Advanced
- Symptom: stale UI or spinner stuck after
35ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-096 — fetch integration #96
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
48ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-097 — fetch integration #97
- Level: Beginner
- Symptom: stale UI or spinner stuck after
61ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-098 — fetch integration #98
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
74ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-099 — fetch integration #99
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
87ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-100 — fetch integration #100
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
100ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-101 — fetch integration #101
- Level: Advanced
- Symptom: stale UI or spinner stuck after
113ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-102 — fetch integration #102
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
126ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-103 — fetch integration #103
- Level: Beginner
- Symptom: stale UI or spinner stuck after
139ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-104 — fetch integration #104
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
152ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-105 — fetch integration #105
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
165ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-106 — fetch integration #106
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
178ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-107 — fetch integration #107
- Level: Advanced
- Symptom: stale UI or spinner stuck after
191ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-108 — fetch integration #108
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
4ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-109 — fetch integration #109
- Level: Beginner
- Symptom: stale UI or spinner stuck after
17ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-110 — fetch integration #110
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
30ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-111 — fetch integration #111
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
43ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-112 — fetch integration #112
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
56ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-113 — fetch integration #113
- Level: Advanced
- Symptom: stale UI or spinner stuck after
69ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-114 — fetch integration #114
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
82ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-115 — fetch integration #115
- Level: Beginner
- Symptom: stale UI or spinner stuck after
95ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-116 — fetch integration #116
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
108ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-117 — fetch integration #117
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
121ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-118 — fetch integration #118
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
134ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-119 — fetch integration #119
- Level: Advanced
- Symptom: stale UI or spinner stuck after
147ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-120 — fetch integration #120
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
160ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-121 — fetch integration #121
- Level: Beginner
- Symptom: stale UI or spinner stuck after
173ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-122 — fetch integration #122
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
186ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-123 — fetch integration #123
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
199ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-124 — fetch integration #124
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
12ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-125 — fetch integration #125
- Level: Advanced
- Symptom: stale UI or spinner stuck after
25ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-126 — fetch integration #126
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
38ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-127 — fetch integration #127
- Level: Beginner
- Symptom: stale UI or spinner stuck after
51ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-128 — fetch integration #128
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
64ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-129 — fetch integration #129
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
77ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-130 — fetch integration #130
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
90ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-131 — fetch integration #131
- Level: Advanced
- Symptom: stale UI or spinner stuck after
103ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-132 — fetch integration #132
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
116ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-133 — fetch integration #133
- Level: Beginner
- Symptom: stale UI or spinner stuck after
129ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-134 — fetch integration #134
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
142ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-135 — fetch integration #135
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
155ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-136 — fetch integration #136
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
168ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-137 — fetch integration #137
- Level: Advanced
- Symptom: stale UI or spinner stuck after
181ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-138 — fetch integration #138
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
194ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-139 — fetch integration #139
- Level: Beginner
- Symptom: stale UI or spinner stuck after
7ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-140 — fetch integration #140
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
20ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-141 — fetch integration #141
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
33ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-142 — fetch integration #142
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
46ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-143 — fetch integration #143
- Level: Advanced
- Symptom: stale UI or spinner stuck after
59ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-144 — fetch integration #144
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
72ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-145 — fetch integration #145
- Level: Beginner
- Symptom: stale UI or spinner stuck after
85ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-146 — fetch integration #146
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
98ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-147 — fetch integration #147
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
111ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-148 — fetch integration #148
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
124ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-149 — fetch integration #149
- Level: Advanced
- Symptom: stale UI or spinner stuck after
137ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-150 — fetch integration #150
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
150ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-151 — fetch integration #151
- Level: Beginner
- Symptom: stale UI or spinner stuck after
163ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-152 — fetch integration #152
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
176ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-153 — fetch integration #153
- Level: Intermediate
- Symptom: stale UI or spinner stuck after
189ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Base URL hard-coded per environment leading to prod misconfiguration.
- Primary remediation: Use env config + relative
/apiproxy in dev. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-154 — fetch integration #154
- Level: Intermediate+
- Symptom: stale UI or spinner stuck after
2ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Effect dependency array omits fetch params causing stale closure requests.
- Primary remediation: Introduce TanStack Query or manual in-flight dedupe map.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-155 — fetch integration #155
- Level: Advanced
- Symptom: stale UI or spinner stuck after
15ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Parsing JSON without try/catch throws uncaught rejections surfaced as white screen.
- Primary remediation: Set
credentialsintentionally; document CORS contract with backend. - Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-156 — fetch integration #156
- Level: Advanced+
- Symptom: stale UI or spinner stuck after
28ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Missing AbortController causes setState on unmounted component after fast navigation.
- Primary remediation: Abort on cleanup; guard state updates with mounted flag or cancel pattern.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-157 — fetch integration #157
- Level: Beginner
- Symptom: stale UI or spinner stuck after
41ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: Credentials/cookies mode wrong for CORS leading to silent 401 loops.
- Primary remediation: Wrap parse + validate; map HTTP status to typed error objects.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.
API0-158 — fetch integration #158
- Level: Beginner+
- Symptom: stale UI or spinner stuck after
54ms of navigation. - Integration smell: server errors surfaced as blank screen without recovery path.
- Root cause class: No request deduplication: identical in-flight fetches hammer API.
- Primary remediation: Include stable serialized params in deps or use query libraries.
- Verify: Network tab + React Query Devtools (if used) + user retry path.
- Interview one-liner: Every effect fetch needs a cancellation story—navigation is a race.