【发布时间】:2018-01-20 03:21:52
【问题描述】:
我有一个从 firebase 数据库中检索数据并更新状态对象的基本组件。然后我尝试将 this.state.data 传递给导出函数以查看数据库中的数据,但它会抛出未定义的数据错误(因为数据中没有任何内容)。
/**
========= LaunchScreen ==========
**/
export default class LaunchScreen extends PureComponent<*, State> {
constructor(props) {
super(props);
this.state = { data: [] };
this.personsRef = firbaseApp.database().ref().child('Persons');
this.listenForPersons = this.listenForPersons.bind(this);
}
componentDidMount = () => { this.listenForPersons(this.personsRef); };
listenForPersons = (personsRef) => {
personsRef.on('value', (snap) => {
var persons = [];
snap.forEach(child => {
persons.push({
name: child.val().name,
_key: child.key
})
});
this.setState({data: persons});
});
};
_renderScene = ({ route }) => {
console.log(this.state.data);
switch (route.key) {
case '1':return ( <SimplePage state={this.state} /> );
case '2': return ( <SimplePage state={this.state} /> );
default: return null;
}
};
render() {
return (
<TabViewAnimated renderScene={this._renderScene} />
);
}
}
简单页面
export default function CurrentStateIndicator({ state, style }: *) {
return (
<View>
<View>
<Text>Current route is: {state.routes[state.index].title || state.index}</Text>
</View>
<List>
<FlatList
data={state.data}
renderItem={({ person }) => (
<ListItem
title={person.name}
/>
)}
/>
</List>
</View>
);
}
但显然,在 SimplePage 中 state.data 是未定义的。
任何人都可以帮助我如何将更新后的 state.data 传递给 simplePage。
谢谢
【问题讨论】:
-
你能在
this.setState({data: persons});之前做console.log(persons)并检查persons的值是否正确 -
是的,它确实返回了一个对象数组。 @Jagrati
-
状态是否定义为空对象?还是
undefined作为 arg 传入?在 SimplePage 函数中 -
@S.Nas listenForPersons = (personsRef) => { peopleRef.onSnapshot( (snap) => { var people = []; snap.forEach(child => { people.push({ name : child.val().name, _key: child.key }) }); this.setState({data: people}); }); };
标签: javascript reactjs react-native firebase-realtime-database react-props