我尝试重新创建文档中使用的示例https://facebook.github.io/react-native/docs/network.html
componentDidMount: function(){
this.createRow();
},
createRow : function(){
var results = fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
return responseJson.movies;
});
this.setState({
'xyz' : results,
'people' : [{'name':'something_else', 'email':'email@gmail.com'}, {'name':'morgan', 'email':'mogo@gmail.com'}]
});
},
然而,当我在render
方法
render: function(){
console.log(this.state.xyz)
我得到:
第一次页面呈现时undefined
(并且xyz
尚未设置,因此有意义)
Promise { <state>: "pending" }
第二次呈现页面时createRow()
从componentDidMount
运行
为什么我会收到pending
状态而不是示例显示的movies
对象?
答案 0 :(得分:1)
的情况是,当执行setState时(因为你的fetch是异步的,但是流程与fetch方法异步),你的promise仍然没有得到解决或拒绝,因为promise是处于挂起状态。所以,你需要在promise解析后调用setState。你可以试试这个:
createRow : function(){
fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
this.setState({
'xyz' : responseJson.movies,
'people' : [{'name':'something_else', 'email':'email@gmail.com'}, {'name':'morgan', 'email':'mogo@gmail.com'}]
});
});
},