【发布时间】:2020-08-15 15:02:00
【问题描述】:
在 render() 之前的控制台中 this.state.data1.length 没有给出任何错误,但是一旦我在视图标签中使用它,就会给出错误: TypeError:未定义不是对象(评估'_this.state.data1.length') 如果我从视图标记中删除此行,则我的 reacttable 标记中不会打印任何内容,因此我认为此行是必需的,但我应该进行哪些更改,以便使用 react 本机代码没有错误,并且我检索到的数据也打印在我的应用程序上。
import React, { Component } from 'react';
import { StyleSheet, View, Text, Button } from 'react-native';
import ReactTable from 'react-table';
import firebase from 'firebase';
const firebaseConfig = {
...
};
firebase.initializeApp(firebaseConfig);
export default class Form1 extends Component {
constructor(props) {
super(props);
this.state = {
data: [],
columns: [
{
Header: "email",
accessor: "email"
},
{
Header: "password",
accessor: "password"
}
]
}
}
componentDidMount() {
const data = [];
const data1 = [];
var query = firebase.database().ref("/users");
query.once("value").then((snapshot) => {
//console.log(snapshot)
snapshot.forEach((childSnapshot, index) => {
let singleObj = {
email: childSnapshot.val().email,
password: childSnapshot.val().password,
}
// console.log('email:',data)
data.push(singleObj);
this.setState({data1 : data});
console.log('sssssssssssssssssss',this.state.data1)
});
});
}
submit1=()=>{
console.log(this.state.data1.length)
console.log('data1:',this.state.data1)
}
render() {
return (
<View style="styles.container">
{this.state.data1.length > 0 && <ReactTable data={this.state.data1} columns={this.state.columns} />}
<Button title='Submit' onPress={this.submit1.bind(this)} />
</View>
);
}
}
const styles = StyleSheet.create({
container: { flex: 1, padding: 16, paddingTop: 30, backgroundColor: '#fff' },
head: { height: 40, backgroundColor: '#f1f8ff' },
text: { margin: 6 }
});
【问题讨论】:
-
您收到此错误是因为您的组件在数据更新之前正在渲染
-
那么根据您的说法,我应该进行哪些更改才能获得正确的输出? @user12129132
-
您没有声明任何状态数据1 将其更改为 this.state.data.length 您是否在这里获得了正确的数据 console.log('sssssssssssssssss',this.state.data1)
-
是的,在 console.log('sssssssssssssssss',this.state.data1) 中给了我正确的输出。只有在视图标签@user12129132 中使用时才会出错
-
this.state = { data: [],是data1还是data
标签: firebase react-native react-table data-retrieval