получить указанные c данные из Firebase с помощью оператора if в React Native - PullRequest
1 голос
/ 14 января 2020

Я новичок в Firebase и React Native. Я создал базу данных, и теперь, когда определенное число равно числу в 1 из объектов в firebase, он сохраняет эти данные в массиве. У меня есть следующий код для этого:

scanOutput = '0';

getUserData = () => {
    console.log(this.scanOutput);
    let ref = firebase.database().ref('Questions/1R1/NL');
    ref.on('value' , snapshot =>{
      var state = snapshot.val();

      console.log(state);

      if('1' === this.scanOutput){
        this.setState({questions: state});
      }
    })

  }

  componentDidMount(){
    this.scanOutput = this.props.navigation.getParam('output'); 
    this.getUserData();
  }

база данных выглядит следующим образом:

enter image description here

В настоящее время оператор if содержит «1» жестко запрограммирован, и я хочу, чтобы, когда this.scanOutput (в данном случае «1») равнялся «question_number» из базы данных, он помещал все данные в состояние.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Ваш код читает все данные в Questions/1R1/NL. Поскольку там может быть несколько вопросов, snapshot может содержать несколько дочерних узлов. Ваш обратный вызов должен справиться с ними, выполнив цикл snapshot.forEach.

Примерно так:

  let ref = firebase.database().ref('Questions/1R1/NL');
  ref.on('value' , snapshot =>{
    snapshot.forEach((question) => {
      var state = question.val();

      if(state.question_number === this.scanOutput){
        this.setState({questions: state});
      }
    })
  })
0 голосов
/ 14 января 2020

Если snapshot возвращает вам объект, то вы можете его деструктурировать:

const { question_number } = snapshot.val();
console.log(question_number);

, тогда вы можете иметь проверку как:

if(question_number === this.scanOutput){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...