UseMemo should not be used for fetching/kicking off a fetch either. UseMemo fans should be pure. Using logic that belongs into useEffect (logic that happens _outside_ the reactive flow) could potentially lead to other side effects which are very hard to debug. Just a example: a lot of fetch implementations are using fetch with a cache triggered in useMemo returning immediately. You will probably have a setState somewhere in the flow which will terribly interrupt react and break your page.
In case you trigger a native fetch, you've got no way to cancel the call due to the missing cleanup fn.
> UseMemo should not be used for fetching/kicking off a fetch either
Wrong. That's just like, your opinion.
The best time to kick off external calls is during first render, not after the component is mounted and React has gotten around to calling your useEffect callback.
useMemo can be a part of the solution along with useRef and useEffect cleanup(remember it's essentially to the unmount lifecycle hook as well).
As in useMemo to make API calls? That is definitely not correct. React explicitly makes no guarantees about how infrequently the fn is called or how long the value is cached for.