Ошибка React Native — undefined не является функцией (вычисляется ‘_app.default.auth()’)

#reactjs #react-native

#reactjs #react-native

Вопрос:

Я продолжаю получать эту ошибку — «undefined не является функцией (вычисляется ‘_app.default.auth()’)» после нажатия «login» или «signup» в моем приложении React Native.

Важно отметить, что и npm start, и react-native run-android, похоже, работают изначально, просто когда я нажимаю кнопки после этого, сборка завершается с ошибкой. В терминале нет других ошибок. Код также, похоже, отлично работает на Mac.

Я изменил импорт firebase с ‘firebase’ на ‘@firebase / app’ из-за предыдущей ошибки «Объекты недопустимы как дочерний элемент React (найден объект с ключами …»

Вот мой код:

 import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View} from 'react-native';
import firebase from '@firebase/app'
import SignUp from './components/auth/signup'
import ItWorked from './components/auth/itworked'

var config = {
  apiKey: "",
  authDomain: "",
  databaseURL: "",
  projectId: "",
  storageBucket: "",
  messagingSenderId: ""
};
firebase.initializeApp(config);

export default class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      userEmail: null
    }
    this.signIn = this.signIn.bind(this)
  }

  authCheck() {
    firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      var displayName = user.displayName;
      var email = user.email;
      var emailVerified = user.emailVerified;
      var photoURL = user.photoURL;
      var isAnonymous = user.isAnonymous;
      var uid = user.uid;
      var providerData = user.providerData;
      this.setState({auth: true})
    } else {
      console.log('Not today')
    }
   })
  }

  componentDidMount() {
    this.authListener()
  }

  authListener() {
    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        this.setState({userEmail: user.email})

      } else {
        this.setState({userEmail: null})
      }
      })
  }

  toggleLogin() {
    this.state.auth ? this.setState({auth: false}) : this.setState({auth: true})
  }

  async componentDidMount() {
    firebase.auth().onAuthStateChanged(user => {
      })
  }

  signIn(email, password) {
    firebase.auth().signInWithEmailAndPassword(email, password)
      .catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
      })
  }

  signUp(email, password) {
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
      var errorCode = error.code;
      var errorMessage = error.message;
    })
  }

  logOut() {
    firebase.auth().signOut()
  }

  render() {
    return (
      <View style={styles.container}>
        {this.state.userEmail ? <TabNavigator /> : <SignUp signIn={this.signIn} signUp={this.signUp} toggleLogin={this.toggleLogin}/>}
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#F5FCFF',
  },
});
  

Комментарии:

1. кажется, вы неправильно импортируете firebase

Ответ №1:

Пожалуйста, проверьте свой import метод. Я нашел этот пример, давайте попробуем:

 import app from 'firebase/app';

const config = {
  apiKey: process.env.REACT_APP_API_KEY,
  authDomain: process.env.REACT_APP_AUTH_DOMAIN,
  databaseURL: process.env.REACT_APP_DATABASE_URL,
  projectId: process.env.REACT_APP_PROJECT_ID,
  storageBucket: process.env.REACT_APP_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_MESSAGING_SENDER_ID,
};

class Firebase {
  constructor() {
    app.initializeApp(config);
  }
}

export default Firebase;
  

Комментарии:

1. Итак, когда у меня нет символа @ при импорте, я получаю следующую ошибку: «Объекты недопустимы как дочерние объекты React (найден объект с ключами …»