2017-10-26 17 views
0

Reactネイティブフレームワークのhttps://jsonplaceholder.typicode.com/usersからjsonデータをListViewに読み込もうとしています。JSONデータを取得してListViewで表示するReact Native

以下は、私が使用しようとしているJSONデータです。

[ 
    { 
    "id": 1, 
    "name": "Leanne Graham", 
    "username": "Bret", 
    "email": "[email protected]", 
    "address": { 
     "street": "Kulas Light", 
     "suite": "Apt. 556", 
     "city": "Gwenborough", 
     "zipcode": "92998-3874", 
     "geo": { 
     "lat": "-37.3159", 
     "lng": "81.1496" 
     } 
    }, 
    "phone": "1-770-736-8031 x56442", 
    "website": "hildegard.org", 
    "company": { 
     "name": "Romaguera-Crona", 
     "catchPhrase": "Multi-layered client-server neural-net", 
     "bs": "harness real-time e-markets" 
    } 
    }, 
    { 
    "id": 2, 
    "name": "Ervin Howell", 
    "username": "Antonette", 
    "email": "[email protected]", 
    "address": { 
     "street": "Victor Plains", 
     "suite": "Suite 879", 
     "city": "Wisokyburgh", 
     "zipcode": "90566-7771", 
     "geo": { 
     "lat": "-43.9509", 
     "lng": "-34.4618" 
     } 
    }, 
    "phone": "010-692-6593 x09125", 
    "website": "anastasia.net", 
    "company": { 
     "name": "Deckow-Crist", 
     "catchPhrase": "Proactive didactic contingency", 
     "bs": "synergize scalable supply-chains" 
    } 
    }, 
    { 
    "id": 3, 
    "name": "Clementine Bauch", 
    "username": "Samantha", 
    "email": "[email protected]", 
    "address": { 
     "street": "Douglas Extension", 
     "suite": "Suite 847", 
     "city": "McKenziehaven", 
     "zipcode": "59590-4157", 
     "geo": { 
     "lat": "-68.6102", 
     "lng": "-47.0653" 
     } 
    }, 
    "phone": "1-463-123-4447", 
    "website": "ramiro.info", 
    "company": { 
     "name": "Romaguera-Jacobson", 
     "catchPhrase": "Face to face bifurcated interface", 
     "bs": "e-enable strategic applications" 
    } 
    }, 
    { 
    "id": 4, 
    "name": "Patricia Lebsack", 
    "username": "Karianne", 
    "email": "[email protected]", 
    "address": { 
     "street": "Hoeger Mall", 
     "suite": "Apt. 692", 
     "city": "South Elvis", 
     "zipcode": "53919-4257", 
     "geo": { 
     "lat": "29.4572", 
     "lng": "-164.2990" 
     } 
    }, 
    "phone": "493-170-9623 x156", 
    "website": "kale.biz", 
    "company": { 
     "name": "Robel-Corkery", 
     "catchPhrase": "Multi-tiered zero tolerance productivity", 
     "bs": "transition cutting-edge web services" 
    } 
    }, 
    { 
    "id": 5, 
    "name": "Chelsey Dietrich", 
    "username": "Kamren", 
    "email": "[email protected]", 
    "address": { 
     "street": "Skiles Walks", 
     "suite": "Suite 351", 
     "city": "Roscoeview", 
     "zipcode": "33263", 
     "geo": { 
     "lat": "-31.8129", 
     "lng": "62.5342" 
     } 
    }, 
    "phone": "(254)954-1289", 
    "website": "demarco.info", 
    "company": { 
     "name": "Keebler LLC", 
     "catchPhrase": "User-centric fault-tolerant solution", 
     "bs": "revolutionize end-to-end systems" 
    } 
    }, 
    { 
    "id": 6, 
    "name": "Mrs. Dennis Schulist", 
    "username": "Leopoldo_Corkery", 
    "email": "[email protected]", 
    "address": { 
     "street": "Norberto Crossing", 
     "suite": "Apt. 950", 
     "city": "South Christy", 
     "zipcode": "23505-1337", 
     "geo": { 
     "lat": "-71.4197", 
     "lng": "71.7478" 
     } 
    }, 
    "phone": "1-477-935-8478 x6430", 
    "website": "ola.org", 
    "company": { 
     "name": "Considine-Lockman", 
     "catchPhrase": "Synchronised bottom-line interface", 
     "bs": "e-enable innovative applications" 
    } 
    }, 
    { 
    "id": 7, 
    "name": "Kurtis Weissnat", 
    "username": "Elwyn.Skiles", 
    "email": "[email protected]", 
    "address": { 
     "street": "Rex Trail", 
     "suite": "Suite 280", 
     "city": "Howemouth", 
     "zipcode": "58804-1099", 
     "geo": { 
     "lat": "24.8918", 
     "lng": "21.8984" 
     } 
    }, 
    "phone": "210.067.6132", 
    "website": "elvis.io", 
    "company": { 
     "name": "Johns Group", 
     "catchPhrase": "Configurable multimedia task-force", 
     "bs": "generate enterprise e-tailers" 
    } 
    }, 
    { 
    "id": 8, 
    "name": "Nicholas Runolfsdottir V", 
    "username": "Maxime_Nienow", 
    "email": "[email protected]", 
    "address": { 
     "street": "Ellsworth Summit", 
     "suite": "Suite 729", 
     "city": "Aliyaview", 
     "zipcode": "45169", 
     "geo": { 
     "lat": "-14.3990", 
     "lng": "-120.7677" 
     } 
    }, 
    "phone": "586.493.6943 x140", 
    "website": "jacynthe.com", 
    "company": { 
     "name": "Abernathy Group", 
     "catchPhrase": "Implemented secondary concept", 
     "bs": "e-enable extensible e-tailers" 
    } 
    }, 
    { 
    "id": 9, 
    "name": "Glenna Reichert", 
    "username": "Delphine", 
    "email": "[email protected]", 
    "address": { 
     "street": "Dayna Park", 
     "suite": "Suite 449", 
     "city": "Bartholomebury", 
     "zipcode": "76495-3109", 
     "geo": { 
     "lat": "24.6463", 
     "lng": "-168.8889" 
     } 
    }, 
    "phone": "(775)976-6794 x41206", 
    "website": "conrad.com", 
    "company": { 
     "name": "Yost and Sons", 
     "catchPhrase": "Switchable contextually-based project", 
     "bs": "aggregate real-time technologies" 
    } 
    }, 
    { 
    "id": 10, 
    "name": "Clementina DuBuque", 
    "username": "Moriah.Stanton", 
    "email": "[email protected]", 
    "address": { 
     "street": "Kattie Turnpike", 
     "suite": "Suite 198", 
     "city": "Lebsackbury", 
     "zipcode": "31428-2261", 
     "geo": { 
     "lat": "-38.2386", 
     "lng": "57.2232" 
     } 
    }, 
    "phone": "024-648-3804", 
    "website": "ambrose.net", 
    "company": { 
     "name": "Hoeger LLC", 
     "catchPhrase": "Centralized empowering task-force", 
     "bs": "target end-to-end models" 
    } 
    } 
] 

fetch呼び出しは、次にデータソースを設定する次のメソッドで行われます。この時点で

componentDidMount() { 
return fetch('https://jsonplaceholder.typicode.com/users') 
.then((response) => response.json()) 
.then((responseJson) => { 
    this.setState({ 
    isLoading: false, 
    dataSource: 
    this.state.dataSource.cloneWithRows(responseJson.name) 
    }, function() { 
    // do something with new state 
    console.log(responseJson); 
    }); 
}) 
.catch((error) => { 
    console.error(error); 
}); 

}

私がリストビューには、このデータを読むのに苦労していますリアクトネイティブフレームワークに新しいいます。

レンダリング方法の中で、私は にListViewを表示すると予想されるこのコードを持っています。

<View> 
<Image source={require('./Resources/house.png')} style= 
{styles.image}/> 
    {spinner} 
    <Text style = { styles.description }>{this.state.message}</Text> 
    <ListView 
    dataSource = { this.state.dataSource} 
    renderRow = { this.renderRow.bind(this)} 
    /> 
</View> 

しかし、ListViewが定義されていません。私は様々なフォーラムの投稿をチェックしたが、解決策を見つけることができない。

アイデア?

感謝

答えて

1

はまず、未定義でListView場合、あなたはファイルの先頭にreact-nativeパッケージからそれをインポートしていることを確認してください。

import { ListView } from 'react-native'; 

さらにresponseJson変数は、項目の配列です、あたかも単一のアイテムであるかのように、.nameのプロパティにアクセスしようとしています。あなたは、各リスト項目の名前だけプロパティを摘み取るしたい場合は、次の操作を行うことができます:

this.state.dataSource.cloneWithRows(responseJson.map(item => item.name)) 

さらには、リストビュードキュメントで述べたように、リアクトネイティブListViewコンポーネントは、現在、廃止されました:

廃止 - 制限付きメモリ使用のためのFlatListやSectionListなどの新しいリストコンポーネントの1つを使用し、バグの削減、パフォーマンスの向上、APIの使いやすさなどを強化しました。詳細については、このブログ記事をご覧ください。

詳細はthis blog postを参照してください。

関連する問題