axiosでDBからデータの取得自体はできているのに、いざそれをsetStateしようとしても、どういうわけかデータが入ってくれません
追記:ListViewのDataSourceを実行する位置が原因で、エラーが発生していたことはわかりました。
ですが今度は、肝心のListViewがなぜかレンダリングされないのです。
ListViewの要素である、ListItemには情報は渡ってきているのですが、どういうわけかまっさらなままレンダーされないのです
js
1// Screen.js 2import React from 'react'; 3import { 4 Text, 5 View 6} from 'react-native'; 7import { List } from '../common'; 8 9class Screen extends React.Component { 10 render() { 11 return ( 12 <View> 13 <List /> 14 </View> 15 ); 16 } 17} 18 19export default Screen;
js
1// List.js 2import React from 'react'; 3import { ListView } from 'react-native'; 4import axios from 'axios'; 5import ListItem from './ListItem'; 6 7class List extends React.Component { 8 constructor() { 9 super(); 10 this.state = { datas: [] }; 11 12 // こっちにdataSourceを置く 13 this.dataSource = new ListView.DataSource({rowHasChanged: (r1, r2) => r1!==r2}); 14 } 15 16 componentWillMount() { 17 // 以前はstateに直接ds.cloneWithRowsしたデータを入れていたが、それでは失敗することがわかったので移動 18 19 // const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 20 //axios.get('http://path/to/api/v1/users') 21 // .then((res)=>{ 22 // this.setState({ datas: ds.cloneWithRows(res.data) }); 23 // // 帰ってきたユーザーデータが表示される 24 // console.log(JSON.stringify(res.data)); 25 // // stateが変わってない 26 // console.log(this.state); 27 // }) 28 // .catch((e)=>console.log(`axios get error: ${e.message}`)); 29 30 // 修正したコード 31 axios.get('http://lala.work/api/v1/users') 32 .then((res)=>this.setState({ datas: res.data })) 33 .catch((e)=>console.log(`axios get error: ${e.message}`)); 34 } 35 36 renderRow(user) { 37 return <ListItem user={user}/>; 38 } 39 40 render() { 41 return ( 42 <ListView 43 enableEmptySections 44 dataSource={this.dataSource.cloneWithRows(this.state.datas)} 45 renderRow={this.renderRow} 46 /> 47 ); 48 } 49} 50 51export default List;
js
1// ListItem.js 2 3import React from 'react'; 4import { 5 Text 6} from 'react-native'; 7 8class ListItem extends React.Component { 9 render() { 10 // データは入っている 11 console.log(this.props.user.name); 12 13 return ( 14 <Text>{this.props.user.name}</Text> 15 ); 16 } 17} 18 19export default ListItem;
どなたかListViewが出ない理由をご存知の方お願いできないでしょうか?
よろしくお願いいたします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/25 04:42 編集
2017/11/25 04:49
2017/11/25 04:53
2017/11/25 05:16