2016-11-16 24 views
0

我试图重新在文档中使用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 protected]'}, {'name':'morgan', 'email':'[email protected]'}] 

     }); 
    }, 

不过的例子,当我转到在render方法打印结果

render: function(){ 
     console.log(this.state.xyz) 

我得到: undefined第一次页面呈现(和xyz尚未设置,这样才有意义)

Promise { <state>: "pending" }

为什么我收到pending状态,而不是movies对象,如示例显示了当呈现页面时,第二次(createRow()componentDidMount运行)?

回答

1

情况是,当执行setState(因为您的提取是异步的,但流程与提取方法是异步的),您的承诺尚未解析或拒绝,因为承诺处于暂挂状态。所以,你需要在诺言解决后调用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 protected]'}, {'name':'morgan', 'email':'[email protected]'}] 

       }); 
      }); 
    }, 
+0

ahhh right ok!谢谢 –