2017-02-19 8 views
0

fetchを使用してサーバーにapi呼び出しを行い、応答jsonファイルが応答の未定義の型を返しています。レスポンスをログに記録して画面に表示したいReact Native:フェッチapi呼び出しが不適切な応答を返す

それのための私のソースコード:しかし

'use strict'; 

import React, {Component} from 'react'; 
import {StyleSheet, View, Text, ListView, ScrollView} from 'react-native'; 

var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 

class BusList extends Component { 

    constructor() { 
     super(); 
     const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
     this.state = { 
      dataSource: ds.cloneWithRows(['row 1', 'row 2']), 
     }; 
    } 

    componentDidMount() { 
     this.loadJSONData(); 
    } 

    loadJSONData() { 
     fetch('my_api!') 
     .then((response) => { 
     return response.json() 
     }) 
     .then((responseJSON) => { 
      return this.setState({dataSource: this.state.dataSource.cloneWithRows(responseJSON)}); 
     }) 
     .catch((error) => { 
     console.warn(error); 
     }); 
} 

renderRow(rowData) { 
    return(
     <View> 
      <Text>{rowData.data}</Text> 
     </View> 
    ); 
} 

render() { 
return (
    <View> 
    <ListView 
     dataSource={this.state.dataSource} 
     renderRow={(rowData) => <Text>{rowData}</Text>} 
    /> 
    </View> 
); 
    } 
} 

module.exports = BusList; 

、私はそれをログに記録しようとすると、私は次のようlog

を取得し、私を助けてください!

答えて

0

ラッパーを使わずにjsonオブジェクトにするのではなく、かなり複雑になると思います。あなたがこれを行うことができます:

//create state 
constructor() { 
     super(); 
     const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
     this.state = { 
      dataSource: ds.cloneWithRows([]), 
      getData:[] 
     }; 
    } 

loadJSONData() { 
     fetch('my_api!', { 
      method: 'get', 
      dataType: 'json', 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json' 
      } 
    }) 
     .then((response) => { 
     this.setState({getData:response}) 
//putting response inside listview directly or you can put this.state.getData 
     this.setState({dataSource:ds.cloneWithRows(response)}) 
     }) 
     .catch((error) => { 
     console.warn(error); 
     }); 

乾杯:)

+0

おかげで多くのことを、これは動作しますが、ここでの問題は、JSONオブジェクトを処理しています! ok入れ子になったjsonオブジェクトや、rowHasChanged関数をより適切に実装するために役立つリンクについては、簡単に説明してください。 –

+0

dataSourceが変更されると、listViewのrenderRow APIが呼び出され、リストビューが更新されます。 – Codesingh

+0

renderRow()でr​​enderRow(rowData)のパラメータを取得し、その後に '。'を使用してjsonデータを単純化できます。たとえば、キー名の詳細があり、その詳細キーの中に「id」、「address」などのキーがある場合は、rowData.detail.addressによって各行の「アドレス」を取得できます。 :) – Codesingh

関連する問題