Why I Stopped Using useEffect to Sync State — and What I Use Instead

useEffect isn't broken — the mental model we teach with it is. I audited every useEffect in a React 19 codebase and found 4 concrete categories where it was an antipattern. Here are the patterns that replaced them: derived state, event handlers, use(), and Server Actions.