Как добавить аутентификационную базу данных слушателя без утечки памяти - PullRequest
1 голос
/ 19 мая 2019

нужна небольшая помощь.я пытаюсь добавить аутентифицирующий слушатель в мое приложение реакции, но я получаю утечку памяти, мне нужно, чтобы этот слушатель был активным все время, поэтому он будет отображать пользовательский контент, который вошел в систему, логин и регистрна том же маршруте, что и пользователь, при изменении состояния авторизации я просто рендеринг различных компонентов.

  state = {
    login: false
  };

  componentWillMount() {
    this.authListener();
  }

  authListener = () => {
    auth.onAuthStateChanged(user => {
      if (user) {
        this.setState({
          login: true
        });
      } else this.setState({ login: false });
    });
  };

  redirectOnLogIn = () => {
    let { login } = this.state;
    if (!login) {
      return <Auth />;
    } else {
      return <Users />;
    }
   };

1 Ответ

0 голосов
/ 19 мая 2019

componentWillMount() - эта функция может вызываться несколько раз перед вызовом начального рендера, что может привести к возникновению нескольких побочных эффектов.В связи с этим не рекомендуется использовать эту функцию для каких-либо побочных действий.Попробуйте использовать componentDidMount() и сообщите.PS Также на вашем месте я бы переместил auth.onAuthStateChanged в ваш файл app.js - что-то вроде этого

firebase.auth().onAuthStateChanged(user => {
  if (user) {
    ReactDOM.render(<Users />, document.getElementById("app"));
    }
  } else {
  ReactDOM.render(<Auth />, document.getElementById("app"));
  }
});

Также для начального запуска вы можете добавить что-то подобное перед этим.

var user = firebase.auth().currentUser; if(user){ ... }else{ ... }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...