不能设置取态反应原生
问题描述:
你好,我试图设置状态的读取调用是这样的:不能设置取态反应原生
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);
还给我不确定 和我得到一个警告“测试”
有什么问题?
TNX很多
答
您可以使用回调。
下面是代码示例
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));
答
取是异步的,因此会立即返回,在随后的条款代码运行之前。因此,setState在控制台日志记录之前不会运行。
+0
所以我如何创建listview取数据后获取? – gregory
+0
更改状态时,组件会自动重新渲染。也就是说,如果渲染方法正确地依赖于状态,则状态变化就是在状态改变时自动更新UI所需的全部内容。因此,一种方法是将最初为空的数组作为状态变量,在render方法中循环该变量(呈现您的列表视图),并使用http请求中的值填充状态变量,从而导致使用更新的重新呈现值。 –
查看我的回答 –
我很高兴它适合你。你可以upvote以及:-) –