应用状态
this.state = {
text: "",
loading: false,
currentNum: 0
};
我最初是从数据库中获取第一项。从
currentNum: 0
开始,正确渲染了第一项。componentWillMount() {
let inititialLoad = true;
this.setState({ loading: true });
firebase.database().ref(this.state.currentNum).on("value", snapshot => {
this.setState({ text: snapshot.val() && snapshot.val().text });
if (inititialLoad) {
this.setState({ loading: false });
inititialLoad = false;
}
});
}
然后我添加了一个按钮
<TouchableOpacity onPress={this.nextData}>
<View>
<Text>Next text</Text>
</View>
</TouchableOpacity>
使用onPress函数将一个添加到
currentNum
nextData() {
this.setState({
currentNum: this.state.currentNum + 1
});
firebase.database().ref(this.state.currentNum).on("value", snapshot => {
this.setState({ text: snapshot.val() && snapshot.val().text });
});
}
我在firbase实时数据库中的数据树是:
我面临的问题是,当我按下按钮时,索引正确增加了,但数据获取似乎发生了变化。
什么时候
currentNum: 0Text: FirstText
currentNum: 1Text: FirstText
currentNum: 2Text: SecondText
因此,我最初必须按两次按钮才能开始逐一浏览各项内容。
我的代码中缺少什么吗?还是我使用错误的方法来使用ref()递增?
提前致谢!
最佳答案
setState
是异步的,您可以将回调传递给setState
,该回调将在状态更改后执行
所以你可以做的是
this.setState({
currentNum: this.state.currentNum + 1
}, () =>
{
firebase.database().ref(this.state.currentNum).on("value", snapshot =>
{
this.setState({text: snapshot.val() && snapshot.val().text});
});
});