Я пытаюсь создать простой независимый чат. Я использовал Firebase для создания базы данных и импортировал ссылку на Fire.js
.
Однако всякий раз, когда я пытаюсь отправить сообщение на экране чата, появляется сообщение об ошибке:
Error: Reference.push failed: first argument contains undefined in property 'messages.user._id
Это код из моего Chat.js
:
import React from 'react';
import {Platform, KeyboardAvoidingView, SafeAreaView } from 'react-native';
import {GiftedChat} from 'react-native-gifted-chat';
import Fire from '../Fire';
export default class ChatScreen extends React.Component {
state ={
messages: []
}
get user() {
return{
_id: Fire.uid,
name: this.props.navigation.state.params.name
};
}
componentDidMount() {
Fire.get(message =>
this.setState(previous => ({
messages: GiftedChat.append(previous.messages, message)
}))
);
}
componentWillUnmount() {
Fire.off();
}
render(){
const chat = <GiftedChat messages={this.state.messages} onSend={Fire.send} user={this.user}/>;
if (Platform.OS === "android") {
return(
<KeyboardAvoidingView style={{flex:1}} behavior='padding' keyboardVerticalOffset={30} enabled>
{chat}
</KeyboardAvoidingView>
);
}
return <SafeAreaView style={{flex:1}}>{chat}</SafeAreaView>
}
}
А это код моего Fire.js
:
import firebase from 'firebase';
class Fire{
constructor() {
this.init()
this.checkAuth()
}
init = () => {
if (!firebase.apps.length) {
firebase.initializeApp({
//This is the reference to the Firebase data
});
}
};
checkAuth = () => {
firebase.auth().onAuthStateChanged(user => {
if (!user) {
firebase.auth().signInAnonymously();
}
});
};
send = messages => {
messages.forEach(item => {
const message = {
text: item.text,
timestamp: firebase.database.ServerValue.TIMESTAMP,
user: item.user
};
this.db.push(message);
});
};
parse = message => {
const {user, text, timestamp} = message.val();
const {key: _id} = message;
const createdAt = new Date(timestamp);
return {
_id,
createdAt,
text,
user
};
};
get = callback => {
this.db.on("child_added", snapshot => callback(this.parse(snapshot)));
};
off() {
this.db.off()
}
get db() {
return firebase.database().ref("messages");
}
get uid() {
return (firebase.auth().currentUser || {}).uid;
}
}
export default new Fire();
Я не понимаю, почему это происходит. Не могли бы вы помочь мне?