我正在尝试创建一个简单的独立聊天室。我使用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();
我不明白为什么会这样。你能帮我吗?
答案 0 :(得分:0)
错误消息:
错误:Reference.push失败:第一个参数包含未定义的属性'messages.user._id
告诉您您的代码调用push():
const message = {
text: item.text,
timestamp: firebase.database.ServerValue.TIMESTAMP,
user: item.user
};
this.db.push(message);
正在传递包含message.user._id
中未定义的对象。由于我们看不到item.user
中的内容,因此我们无法为您诊断出这一点,因此您将需要弄清楚为什么会发生这种情况。
最重要的是,Firebase SDK不允许您编写属性包含未定义的对象,而您需要在代码中进行检查。