Start here. This is the direct spoken answer to practice first.
Why this question matters
Cleanup is where React side effects become production behavior. Without cleanup, components can leak listeners, update after unmount, or show stale data.
If an effect starts something that continues outside the render, I would return a cleanup function. That cleanup removes event listeners, clears timers, unsubscribes from streams, or aborts requests. For fetches, I can use AbortController and pass the signal to the request. If the user changes filters or leaves the page, the old request no longer needs to update the UI.