Dmitri Pavlutin walks us through properly cleaning up side-effects in React:
From time to time you might have difficulties at the intersection of component lifecycle (initial render, mount, update, unmount) and the side-effect lifecycle (start, in progress, complete).
Tackled are fetch requests, timers like
setTimeout(), debounce or throttle functions, etc.
With the techniques applied, you should no longer see warnings like the one below:
Warning: Can't perform a React state update on an unmounted component.