Отправка сообщения: неопределенный идентификатор - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь создать простой независимый чат. Я использовал 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();

Я не понимаю, почему это происходит. Не могли бы вы помочь мне?

1 Ответ

0 голосов
/ 25 февраля 2020

Сообщение об ошибке:

Ошибка: Reference.pu sh не удалось: первый аргумент содержит неопределенное значение в свойстве 'messages.user._id

Сообщает вам что ваш код, который вызывает pu sh ():

        const message = {
            text: item.text,
            timestamp: firebase.database.ServerValue.TIMESTAMP,
            user: item.user
        };

        this.db.push(message);

, передает объект, содержащий неопределенное значение в message.user._id. Поскольку мы не можем увидеть, что находится в item.user, мы не можем диагностировать это для вас, поэтому вам нужно выяснить, почему это происходит.

Суть в том, что Firebase SDK не будет позволяет вам писать объекты, свойства которых содержат неопределенные значения, и вам нужно проверить это в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...