React firebase не может печатать дочерние значения?

Я хочу распечатать дочерние значения firebase в некотором систематическом порядке. Если у меня более 1 дочернего узла, тогда должен быть напечатан весь дочерний узел с его ключом и значением.

Моя база данных firebase: React firebase не может печатать дочерние значения?

Теперь мой код:

import React,{Component} from "react";
import LogInNavbar from './LogIn_Navbar';
import Footer from './Footer';
import HomePageContent from './HomePage_Content';
import {connect} from "react-redux";
import firebase from 'firebase';
import {withRouter} from "react-router-dom";
import {bindActionCreators} from "redux";
import {action_getdata} from '../actions';
import { db } from '../firebase/firebase';
class LoginHome extends Component {
  constructor(props){
    super(props);

    this.state = {
      Hemoglobin:[],
      BloodP:[],
      BloodG:[],
      Diabetic:[],
      Name:''
    };
  }
  componentDidMount(){
    console.info(this.props.user);
    if (this.props.aadharNumber === ''){
      db
      .ref(this.props.quali+'/'+this.props.uName)
      .on('value', snapshot=>{
        this.props.action_getdata({
          aadharNumber: snapshot.val().aadharNumber,
          biometricImage: snapshot.val().biometricImage,
          email: snapshot.val().email,
          firstName: snapshot.val().firstName,
          lastName: snapshot.val().lastName,
          mobileNumber: snapshot.val().mobileNumber,
          password: snapshot.val().password,
          qualification: snapshot.val().qualification,
          uName: snapshot.val().uName
        });
      });
    }
    const rootRef = firebase.database().ref('Reports/');
    const post = rootRef.child('yashchks87').orderByKey();

         post.once('value', snap => {
           snap.forEach(child => {
               this.setState({
                   Name: this.state.Name.concat([child.key]),
                   BloodP: this.state.BloodP.concat([child.val().BloodP]),
                   BloodG: this.state.BloodG.concat([child.val().BloodG]),
                   Hemoglobin: this.state.Hemoglobin.concat([child.val().Hemoglobin]),
                   Diabetic: this.state.Diabetic.concat([child.val().Diabetic])
               });

               const postList = this.state.Name.map((dataList, index) =>
                    <p>
                        {dataList}
                        <br />
                        {this.state.BloodP[index]}
                        <br />
                        {this.state.BloodG[index]}
                        <hr />
                    </p>

                );

                this.setState({
                    post: postList
                });
           });
       });


  }
  render(){
    return(
      <div>
        <LogInNavbar />
        <div className='p-4'>
          <div className='pt-4'/>
          <h1 className='pt-4'>Your history something like this:</h1>
          <ul>{this.state.post}</ul>
        </div>
        <Footer />
      </div>
    );
  }
}
function mapStateToProps(state)
{
  return{
    user:state.authentication.user,
    aadharNumber: state.getdata.aadharNumber,
    biometricImage: state.getdata.biometricImage,
    email: state.getdata.email,
    firstName: state.getdata.firstName,
    lastName: state.getdata.lastName,
    mobileNumber: state.getdata.mobileNumber,
    password: state.getdata.password,
    qualification: state.getdata.qualification,
    uName: state.getdata.uName,
    quali: state.getdata.quali
  }
}
function mapDispatchToProps(dispatch){
  return{
    action_getdata:bindActionCreators(action_getdata,dispatch)
  }
}
export default withRouter(connect(mapStateToProps,mapDispatchToProps)(LoginHome));

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

Как получить и отобразить весь дочерний список из Firebase React.

И моя ошибка:

Моя картинка с ошибкой. Заранее спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
378
2

Ответы 2

Проблема заключается не в вашей функции render, а в инициализации вашего состояния, когда у вас был Name: '' // string not array, а javascript, будучи очень забавным языком, должен был предупреждать вас, когда вы пытались

this.setState({
  Name: this.state.Name.concat([child.key]),
 .....

это имя является строкой, а не массивом, а вместо этого тип JS преобразовал его в строку

'abcd'.concat(['efg']) // 'abcdefg' :-)

сделайте свое начальное имя массивом, чтобы избежать этого

Во-первых, спасибо. Я изменил его, и он отлично работает, ошибка исчезла. Но я не могу получить значения из firebase, а в консоли отображается undefined.

yash Choksi 12.05.2018 17:40

Где и что именно отображается в коде undefined?

Femi Oni 12.05.2018 17:47

Я пишу что-то вроде: componentDidUpdate () {

yash Choksi 12.05.2018 17:48

Я добавил ниже код, и он показывает undefined: componentDidUpdate () {console.info (this.state.BloodG); console.info (this.state.BloodP); }

yash Choksi 12.05.2018 17:50

Мне сложно сказать, но уверены ли вы, что ваша база данных настроена правильно и возвращает данные? [ ].concat(undefined) // [undefined]

Femi Oni 12.05.2018 18:08

Одна проблема, которую я вижу, заключается в том, что кажется, что вы пытаетесь сослаться на «Отчеты», но не установили для него начальное состояние. Это вернет undefined, если вы попытаетесь сослаться на него. Вы также объявляете значения объекта в виде массивов. Попробуй это:

class LoginHome extends Component {
  constructor(props){
    super(props);
    this.state = {
      Reports:[],
      Name:''
    }
  }

Также "Name, BloodP и BloodG" не являются дочерними элементами "yashchks87".

Другие вопросы по теме