异步函数中的setState反应原生

时间:2016-06-15 12:50:52

标签: react-native

我在我的应用程序中使用Navigator组件来呈现路由内容我使用fetch来执行http请求以从服务器获取数据。

function add(arg1, arg2) {

    if (isNan(arg1) || isNan(arg2)) return undefined;

    if (!arg2) {
        return functionName(arg1);
    }

    return arg1 + arg2;
}

我遇到的问题是,当调用它的组件不再安装时,有时会触发fetch,因此我不断收到错误,我试图更新未安装的组件。如果您在路线之间快速移动会发生这种情如果卸载组件,有没有办法终止关闭执行?

2 个答案:

答案 0 :(得分:3)

在安装组件时,您应该开始fetch请求Promise并存储它。

然后您可以将此Promise设为CancelablePromise并取消卸载该组件的承诺。

Here您可以阅读如何制作CancelablePromise

答案 1 :(得分:0)

在设置状态之前,您应该检查组件是否已安装。

componentDidMount() {
    this.isMounted = true;
    fetch(url).then((res) => {
        if(this.isMounted) {
            this.setState({this.data: res});
        }
    });
}

componentWillUnmount() {
    this.isMounted = false;
}