Невозможно прочитать свойство «сообщений» неопределенных - PullRequest
0 голосов
/ 06 октября 2019

У меня есть слушатель изменений в БД Firebase. Сообщения записываются в Firebase, но всякий раз, когда я пытаюсь обновить локальное состояние через прослушиватель, он возвращает Cannot read property 'messages' of undefined.

Ошибка в коде

Строка 122-125 файла App.js

Github: https://github.com/kingdomwilks/Slack2

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

Невозможно прочитать свойства сообщения 'undefined'.

Я записал в консоль объект, возвращаемый слушателем, и он выглядит как массив.

FIREBASE LISTENER

firebasePeopleListener = () => {
    database().ref('people/').on('value', (snapshot) => {
        let people = snapshot.val();
        console.log(people);
        this.setState({
            people: people
        });
    });
}

ОШИБКА, появляющаяся здесь

render() {
console.log(this.state);
let messages = [];
let isSomethingSelected = false;

if(this.state.selectedPersonId) {
    messages = this.state.people[this.state.selectedPersonId - 1].messages;
    isSomethingSelected = true;
}

1 Ответ

0 голосов
/ 06 октября 2019

Массив people, возвращаемый из вашей базы данных, возвращает список людей с первым значением как empty, поэтому, когда вы попытаетесь получить доступ к this.state.people[0], он ничего не найдет и выдаст ошибку.

enter image description here

Кажется, здесь обсуждается , почему коллекции Firebase начинаются с пустой строки.

Однако вы можете внести изменения в firebasePeopleListener в App.js и отфильтровать ответ, чтобы добавить в штат только тех людей, у которых установлен id.

firebasePeopleListener = () => {
        database().ref('people/').on('value', (snapshot) => {
            let people = snapshot.val();
            let updatedPeople = [];

            for(let i in people) {
                if(people.hasOwnProperty(i) && people[i].id) {
                    updatedPeople.push(people[i]);
                }
            }
            this.setState({
                people: updatedPeople
            });
        });
    };

Это должноисправить вашу проблему сейчас.

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