React native - объекты недействительны как дочерний React (найдены: объект с ключами {$$ typeof, type, key, ref, props, _owner, _store})
Я новичок в React Native, и у меня появляется ошибка, приведенная ниже:
Объекты недействительны в качестве дочернего элемента React (найдено: объект с ключами {$$ typeof, type, key, ref, props, _owner, _store}). Если вы хотите отобразить коллекцию детей, используйте вместо этого массив.
Здесь весь мой код включен в файл компонента, кроме стиля:
import React, { Component } from 'react';
import { View, Text, TextInput, TouchableOpacity, Image, StyleSheet } from 'react-native';
import firebase from 'firebase';
class LoginForm extends Component {
state = { email: '', password: '', error: '', loading: false };
onButtonPress(){
const email = this.state.email;
const password = this.state.password;
this.setState({error: '', loading: true});
firebase.auth().signInWithEmailAndPassword(email, password)
.then(this.onLoginSuccess.bind(this))
.catch(() => {
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(this.onLoginSuccess.bind(this))
.catch(this.onLoginFail.bind(this));
});
}
onLoginSuccess(){
this.setState({email: '', password: '', error: '', loading: false});
}
onLoginFail(){
this.setState({error: 'Nie udalo sie utworzyc konta.', loading: false});
}
render(){
return(
<View style={styles.container}>
<View style={styles.imageContainer}>
<Image
style={styles.image}
source={require('../images/loginIcon.png')}
/>
</View>
<View style={styles.formContainer}>
<TextInput
style={styles.input}
placeholder="Email..."
placeholderTextColor='rgba(255,255,255,0.9)'
underlineColorAndroid='rgba(0,0,0,0)'
onChangeText={(email) => this.setState({email: email})}
value={this.state.email}
autoCorrect={false}
/>
<TextInput
style={styles.input}
placeholder="Hasło..."
placeholderTextColor='rgba(255,255,255,0.9)'
underlineColorAndroid='rgba(0,0,0,0)'
autoCorrect={false}
onChangeText={(password) => this.setState({password: password})}
value={this.state.password}
secureTextEntry
/>
<TouchableOpacity style={styles.buttonContainer}>
<Text style={styles.button}>
Zaloguj się
</Text>
</TouchableOpacity>
<Text style={styles.error}>
{this.state.error}
</Text>
</View>
</View>
);
}
}
Я довольно смущен, как исправить эту проблему. Заранее спасибо.
Ответы
Ответ 1
Попробуй это:
Удалите оператор импорта firebase из App.js:
import firebase from 'firebase'
При инициализации Firebase создайте константу:
initializeFirebase() {
const firebase = require("firebase");
// Initialize Firebase
var config = {
...
};
firebase.initializeApp(config);
//inicializando o firestore
const firestore = require("firebase/firestore");
db = firebase.firestore();
db.settings({ timestampsInSnapshots: true });
}
componentWillMount() {
this.initializeFirebase();
...
}
Для меня это обходное решение работает очень хорошо!
Ответ 2
У меня была эта проблема сегодня. Я проверил diff на исходный код между 5.0.3 и 5.0.4 и обнаружил, что экспорт изменился. Я также обнаружил, что если я изменил оператор import следующим образом, что он работает с последней версией (5.3.0):
import firebase from '@firebase/app'
import '@firebase/auth'
Выполнение этого способа позволит вам избежать require
в середине вашего кода, что является предпочтительным imho.
Ответ 3
Это проблема с firebase версии 5.0.6, тогда как переход к версии разрешит эту проблему. Например, попробуйте это
$ npm install --save [email protected]
Если версия 5.0.4 также не работает для вас, чем попробуйте версию 4.9.1, так как это то, что я использую, и она разрешила эту проблему для меня
$npm install --save [email protected]
Ответ 4
Это работает для меня!
$npm install --save [email protected]
В документах firebase они говорят:
Исправлена ошибка, при которой импорт подстановочных знаков ES6 прерывался. Closure Compiler
LINK >> https://firebase.google.com/support/release-notes/js
Ответ 5
попробуйте изменить оператор импорта на это:
import firebase from '@firebase/app';
Ответ 6
У меня была та же проблема, и я решил ее, удалив инструкцию импорта firebase:
import firebase from 'firebase'
и замените его, создав глобальную const
внутри моего компонента, которая будет инициализирована после завершения сборки компонента:
componentDidMount() {
this.firebase = require('firebase');
}
то вы можете использовать все методы this.firebase
используя this.firebase
... example:
this.firebase.auth().onAuthStateChanged((user) => {
//Some Code
});
Ответ 7
Эта проблема связана с версией Firebase 5.0.6. Попробуйте понизить версию firebase, выполнив эту команду.
$ npm install --save [email protected]
После этого, если проблема все еще существует, попробуйте понизить плагин firebase до версии 4.9.1
$npm install --save [email protected]
Ответ 8
"dependencies": {
"firebase": "^5.5.9",
"react": "16.6.1",
"react-native": "0.57.7",
"react-native-material-kit": "^0.5.1",
"react-native-vector-icons": "^6.1.0"
}, с вышеупомянутыми зависимостями, мне удалось решить эту проблему, выполнив
import firebase from '@firebase/app';
Ответ 9
Я столкнулся с подобной проблемой, но без использования firebase
, решение для меня было enable remote JS debugging