Один из антипаттернов при работе с асинхронными функциями в useEffect — использование async-функции напрямую в useEffect. 1
Это приводит к тому, что React может запустить асинхронную функцию, но не сможет выполнить функцию очистки. 1 Чтобы избежать проблем, рекомендуется создать внутри useEffect асинхронную функцию и немедленно запустить её. 4
Это связано с тем, что асинхронные функции всегда возвращают Promise, а useEffect должен возвращать только функцию, которая используется для очистки. 13