【问题标题】:Can not set state on fetch react native无法在获取反应本机时设置状态
【发布时间】:2016-12-04 09:54:47
【问题描述】:

您好,我尝试像这样设置 fetch 调用的状态:

    getCats() {
        fetch(GLOBALS.API + '/specials.php?action=getCats&key=' + GLOBALS.KEY)
        .then((response) => response.json())
        .then((responseJson) => {
            this.setState = ({
                dataSource: "test"
            });
Alert.alert("test");

        })
        .catch((error) => {
            console.log(error.toString());
        });
    }

    componentDidMount() {
        this.getCats();
        console.log(this.state.dataSource);
    }

但行:

console.log(this.state.dataSource);

返回我未定义 我收到“测试”警报

什么问题?

很多

【问题讨论】:

  • 检查我的答案
  • 我很高兴它对你有用。你也可以投票吗:-)

标签: android react-native fetch


【解决方案1】:

您可以使用回调。

下面是代码示例

getCats(successCallBack, failureCallback) {
    fetch(GLOBALS.API + '/specials.php?action=getCats&key=' + GLOBALS.KEY)
        .then(
            function(response) {
                if (response.status !== 200) {
                    console.log('Looks like there was a problem. Status Code: ' +
                        response.status);
                    failureCallback();
                }
                // Examine the text in the response
                response.json().then(function(data) {
                    console.log(data)
                    successCallBack(data);
                });
            }
        )
        .catch(function(err) {
            console.log('Fetch Error :-S', err);
            failureCallback();
        });
}

下面是成功和失败回调的代码

successCallBack(data) {
     console.log(data)
}

failureCallback() {
    alert("failure");
}

下面是绑定成功和失败回调的代码。

getCats(this.successCallBack.bind(this), this.failureCallback.bind(this));

【讨论】:

    【解决方案2】:

    Fetch 是异步的,因此它将在 then 子句中的代码运行之前立即返回。因此,setState 在控制台记录之前不会运行。

    【讨论】:

    • 那么我如何在获取数据后创建列表视图?
    • 当状态改变时,组件会自动重新渲染。即,如果渲染方法正确地依赖于状态,状态变化就是在状态变化时自动更新 UI 所需要的。因此,一种方法是将最初为空的数组作为状态变量,在渲染方法中循环该变量(渲染您的列表视图),并使用来自 http 请求的值填充状态变量,从而导致使用更新的重新渲染值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多