Получение ошибки после успешного удаления элемента из Firebase - PullRequest
0 голосов
/ 07 июля 2019

Я попытался удалить элемент из созданной мною базы. Он фактически удаляет его из базы данных, но страница выдает ошибку:

TypeError: Невозможно прочитать свойство '-Lj884cBwoz7QsEyBxTK' с нулевым значением

screenshot of the error

а это мой код

//retrieve data from database and store it in state

fetch(e){

const index = e.target.id;

      this.database.on('value', (e)=>{

let student = e.val()[index]
const student_name = student.full_name;
const age = student.age
const gender = student.gender
const email = student.email
const admission_year = student.admission_year
const country = student.country

          this.setState({
            student_id : index,
            current_student: student_name,
              current_student_age: age,
              current_student_gender: gender,
              current_student_admission_year: admission_year,
              current_student_email: email,
              current_student_country: country,
            })


  })
}


//remove student
removeStudent(){

  return firebase.database().ref('studentsInfo').child(this.state.student_id).remove()

  }

и функция removeStudent просто связана с такой кнопкой

<button onClick={this.removeIt} className='delete'>Delete Student</button>

Ошибка указывает, что проблема в функции извлечения. Я использовал позже, чтобы получить информацию о студенте из базы данных, и она работает хорошо.

Функция removeStudent по-прежнему удаляет студента из базы данных, но создает ошибку, связанную с функцией выборки.

Надеюсь, я достаточно хорошо объяснил свою проблему.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Ваш метод fetch читается так, как будто он был написан для извлечения данных только один раз.Но вы подключаете там on() слушателя, который остается активным после завершения fetch().Поэтому, когда вы удаляете узел, обратный вызов on() запускается снова, и в этот момент let student = e.val()[index] может больше не быть правильным, потому что index имеет значение, которое вы определили ранее.

Если вы хотите толькополучить данные один раз, вместо этого используйте метод once():

fetch(e){

    const index = e.target.id;

    this.database.once('value', (e)=>{
        let student = e.val()[index]
        ...
0 голосов
/ 07 июля 2019

Снимок данных пуст после удаления записи.В вашем обработчике изменения значения e.val() вернет null.Удаленные данные больше не доступны.

Сначала проверьте, не является ли моментальный снимок пустым, и примите соответствующие меры:

this.database.on('value', (e) => {
    if (e.val() === null) {
        this.setState({
            // State after deleting the record
        });
    }

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