useEffect
без второго параметра будет выполняться при каждом обновлении.
useEffect(() => {
setLoading(true)
checkReturn()
getUser()
})
, поэтому это установит загрузку и попытается получить пользователя. и когда данные приходят с сервера, он будет запущен снова.
Таким образом, вы должны изменить его на: useEffect(() => {...}, [])
, чтобы он выполнялся только на этапе монтирования (начало).
Обновление: вы следует проверять возврат при каждом обновлении, а не только при запуске. поэтому измените код на:
useEffect(() => {
setLoading(true)
getUser()
}, [])
useEffect(() => {
checkReturn()
})
Ps: есть еще одна проблема с вашим кодом:
querySnapshot.docs.forEach(doc => {
setAll(JSON.stringify(doc.data()));
});
возможно, это должно быть так:
setAll(querySnapshot.docs.map(doc => JSON.stringify(doc.data())));