我正在使用React Native构建应用程序,这是该技术的新手。
我理解setState
是异步的,并且出于性能原因可以批量更新。
我遇到的问题是,setState
在回调中调用它后没有触发更新,这在我的API调用完成后执行。
我不是立即意味着,我的意思是无限期 - 如果我不触摸屏幕。
按照下面的代码,有一个名为" foo"的状态,当组件安装时,它被设置为某个默认值。
我按下"上传"按钮(见下文),这会触发API调用,这由"上传"功能如下。在此API调用的成功回调中,我然后调用this.setState
..并更改了prop的值
"富"
按下上传后,如果我将设备放在桌面上10秒,1分钟,10分钟,则永远不会调用组件的componentDidUpdate
方法。但是,如果我按下屏幕/触摸按钮等,在进行API调用后,状态会发生变化,调用componentDidUpdate
。
我在这里错过了一招吗?这看似奇怪的行为。
此示例中的API调用在不到1秒的时间内完成。同样,如果我将设备放在桌面上10分钟,componentDidUpdate
不会被触发 - 只要我触摸屏幕/某个UI元素,就会调用componentDidUpdate
。
以下示例代码。
class SomeComponent extends Component {
...
componentDidMount () {
this.setState({ foo: "Hello, world."});
}
componentDidUpdate () {
console.log("Component updated.");
}
upload (files) {
Upload.upload(files, (res) => {
//Success uploading file.
//Clear pendingFiles
this.setState({
foo: "bar"
});
}, (err) => {
console.log("Errorz");
console.log(err);
});
}
render () {
return (
<View>
<Button onPress={() => { this.upload(); }}
title="Upload">
<Text>Upload</Text>
</Button>
<Text>{this.state.foo}</Text>
</View>
);
}
}