Бесконечное l oop когда setState внутри Firebase AuthStateChange - PullRequest
1 голос
/ 14 марта 2020

Я хочу сохранить коллекцию Firebase как состояние, чтобы я мог отобразить ее и отобразить каждого пользователя. Я использую onAuthStateChange, поэтому я не получаю ошибку uid undefine при обновлении страницы. Любая идея, почему установка состояния внутри onAuthStateChanged приведет к бесконечному l oop? OnAuthStateChange не должен прослушивать изменения в состояниях React, а скорее изменения в пользовательских состояниях, например, вошли в систему или вышли из системы, верно?

// userHome.js - infinite loop

export default function(){
  const [userCollection, setUserCollection] = useState();

  firebase.auth().onAuthStateChanged(isUser => {
    if (isUser) {
      const db = firebase.firestore();
      const userRef = db.collection("user").doc(currentUser.uid);
      setUserCollection(userRef);
    }
  });
}
// Auth.js

export const AuthContext = React.createContext();

export const AuthProvider = ({ children }) => {
  const [currentUser, setCurrentUser] = useState(null);

  useEffect(() => {
    // Runs everytime auth state changes
    app.auth().onAuthStateChanged(user => {
      setCurrentUser(user);
      user.getIdTokenResult().then(IdTokenResult => {
        user.adminRole = IdTokenResult.claims.adminRole;
        user.shopRole = IdTokenResult.claims.shopRole;
        user.userRole = IdTokenResult.claims.userRole;
      });
      console.log("user state changed");
    });
  }, []);

  return (
    <AuthContext.Provider
      value={{
        currentUser
      }}
    >
      {children}
    </AuthContext.Provider>
  );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...