Я хочу распечатать дочерние значения firebase в некотором систематическом порядке. Если у меня более 1 дочернего узла, тогда должен быть напечатан весь дочерний узел с его ключом и значением.
Теперь мой код:
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.
И моя ошибка:
Моя картинка с ошибкой. Заранее спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема заключается не в вашей функции render, а в инициализации вашего состояния, когда у вас был Name: '' // string not array, а javascript, будучи очень забавным языком, должен был предупреждать вас, когда вы пытались
this.setState({
Name: this.state.Name.concat([child.key]),
.....
это имя является строкой, а не массивом, а вместо этого тип JS преобразовал его в строку
'abcd'.concat(['efg']) // 'abcdefg' :-)
сделайте свое начальное имя массивом, чтобы избежать этого
Где и что именно отображается в коде undefined?
Я пишу что-то вроде: componentDidUpdate () {
Я добавил ниже код, и он показывает undefined: componentDidUpdate () {console.info (this.state.BloodG); console.info (this.state.BloodP); }
Мне сложно сказать, но уверены ли вы, что ваша база данных настроена правильно и возвращает данные? [ ].concat(undefined) // [undefined]
Одна проблема, которую я вижу, заключается в том, что кажется, что вы пытаетесь сослаться на «Отчеты», но не установили для него начальное состояние. Это вернет undefined, если вы попытаетесь сослаться на него. Вы также объявляете значения объекта в виде массивов. Попробуй это:
class LoginHome extends Component {
constructor(props){
super(props);
this.state = {
Reports:[],
Name:''
}
}
Также "Name, BloodP и BloodG" не являются дочерними элементами "yashchks87".
Во-первых, спасибо. Я изменил его, и он отлично работает, ошибка исчезла. Но я не могу получить значения из firebase, а в консоли отображается undefined.