Как использовать firebase.auth без повторной инициализации firebase в файле моей учетной записи - PullRequest
0 голосов
/ 12 марта 2019

Я получаю эту ошибку, потому что firebase снова инициализируется в моем файле account.js. Я хочу использовать firebase.auth, чтобы мой файл account.js отображал форму входа при выходе и отображал кнопку выхода при входе. Есть ли правильный способ сделать это? enter image description here

Account.js

import React from 'react';
import firebase from 'firebase';
import { View, Image, TouchableOpacity, Text, TextInput } from 'react-native';
import { StackNavigator, TabNavigator } from 'react-navigation';
import { Card, Button, Spinner, CardSection } from '../common';
import LoginForm from '../LoginForm';
import router from '../../config/router';

class Account extends React.Component {
  state = { loggedIn: false };

  componentWillMount() {
    firebase.initializeApp({
    apiKey: 'sksssk',
    authDomain: 'ssjkjskjs',
    databaseURL: 'skhskjhsk',
    projectId: 'sijisj',
    messagingSenderId: 'jwuduwid'
  });
  firebase.auth().onAuthStateChanged((user) => {
    //event handler that handles either signing in or signing out
    if (user) {
      this.setState({ loggedIn: true });
    } else {
      this.setState({ loggedIn: false });
    }
  });
    }
    renderContent() {
      if (this.state.loggedIn) {
        return (
          <Provider store={store}>
            <Tabs />
            <Button>
              Log Out
            </Button>
          </Provider>
        );
      }

App.js

class App extends Component {
  state = { loggedIn: false };

  //lifecyle method for firebase initialization
  componentWillMount() {
    firebase.initializeApp({
        apiKey: 'sksssk',
        authDomain: 'ssjkjskjs',
        databaseURL: 'skhskjhsk',
        projectId: 'sijisj',
        messagingSenderId: 'jwuduwid'
  });
firebase.auth().onAuthStateChanged((user) => {
  //event handler that handles either signing in or signing out
  if (user) {
    this.setState({ loggedIn: true });
  } else {
    this.setState({ loggedIn: false });
  }
});
  }
  renderContent() {
    if (this.state.loggedIn) {
      return (
        <Provider store={store}>
          <Tabs />
        </Provider>
      );
    }
  }

  render() {
    return (
      <Provider store={store}>
        <Tabs />
      </Provider>
    );
  }
}

export default App;

1 Ответ

0 голосов
/ 12 марта 2019

Лучший способ - убедиться, что инициализация выполняется в месте, которое выполняется только один раз, как прокомментировал Александр.

В качестве альтернативы, я иногда просто обнаруживаю, была ли Firebase уже инициализирована:

if (firebase.apps.length === 0) {
  var config = {
    ...
  };
  firebase.initializeApp(config);
}

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

...