Key Ideas
1useState. Returns [value, setter]; setter triggers re-render.
2useEffect. Runs a function after render.
3[] dependency. Effect runs once, on mount.
4No array argument. Effect runs after every render.
5Loading state. Track fetch-in-flight as its own boolean.