在回调中调用时,React setState不会触发自动更新

时间:2017-06-30 15:25:25

标签: javascript reactjs asynchronous react-native

我正在使用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>
           );
    }
}

0 个答案:

没有答案