# #reactjs #firebase #google-cloud-firestore #firebase-authentication #react-hooks
Вопрос:
Всякий раз, когда компонент монтируется, будет вызываться onAuthStateChange(setCurrentUser), в котором передается функция для установки состояния текущего пользователя. Затем Firebase возвращает объект аутентификации в зависимости от того, вошел ли пользователь, который я использую для установки состояния текущего пользователя, а также сохранения данных в firestore с помощью createUserDocument().
Что делает авт.Возврат onAuthStateChanged(асинхронный пользователь ….)? Я в замешательстве, так как его возвращаемое значение назначается для отмены подписки, которая вызывается всякий раз, когда компонент отключается.
function onAuthStateChange(callback) {
return auth.onAuthStateChanged(async userAuth => {
if (userAuth) {
const userRef = await createUserDocument(userAuth);
userRef.onSnapshot(snapShot => {
callback({
id: snapShot.id,
...snapShot.data()
})
})
} else {
callback(null);
}
})
}
function App() {
const [currentUser, setCurrentUser] = useState(null);
useEffect(() => {
const unsubscribe = onAuthStateChange(setCurrentUser);
return () => {
unsubscribe();
};
}, [])
Ответ №1:
Согласно документации onAuthStateChanged
возвращается firebase.Unsubscribe
. Когда вы вызываете эту функцию, Firebase гарантирует, что этот запрос будет удален из наблюдаемых объектов (поэтому firebase не уведомляет ваш компонент, которого больше нет, и это предотвращает ошибки, утечки памяти или потерю вычислительной мощности).
Наблюдаемые объекты реализованы внутри Firebase, и именно так они решают, кто запрашивал уведомление при изменении определенного состояния.