やりたい事
News APIとReact Nativeを使ってニュース記事などを表示させるアプリを作っています。
カテゴリーの一覧を表示するページで、カテゴリー名をタイトルにし、その下に3つ程度カテゴリーごとの記事を抽出して記載したいと考えています。
イメージはこのような形です。
【タイトル】
・記事1タイトル
・記事2タイトル
・記事3タイトル
それぞれReact Native ElementsのCardを用いて表現します。
1枚1枚のカードの表現は以下のように行っています。
javascript
1 function singleCard(title,color,items) { 2 3 return ( 4 <View style={{width:"50%"}}> 5 <Card 6 title={title} 7 containerStyle={{borderColor:color,borderWidth:2 }} 8 titleStyle={{color:color}} 9 > 10 <FlatList data={items} renderItem={({item}) => { 11 <Text>{item.title}</Text> 12 }} /> 13 </Card> 14 </View> 15 ) 16 }
そして上記の関数をもとに、カテゴリーすべてのカードを取得する関数を定義しています。
javascript
1 function Cards() { 2 let element = [] 3 let topNews = [] 4 5 categories.map((data,i) => { 6 7 var url = "https://newsapi.org/v2/top-headlines?"+'country=jp&'+'apiKey=(myapikey)&'+'category='+data +"&pageSize=3" 8 var req = new Request(url); 9 fetch(req).then((response) => response.json()) 10 .then((result) => ( 11 topNews.push(result.articles) 12 )) 13 .then(() => { 14 const tmp = singleCard(data,colorList[i%7],topNews[i]) 15 element.push(tmp) 16 }) 17 }) 18 return ( 19 element 20 ) 21 }
やりたい事としては、
- カテゴリーを一つずつ選択
- カテゴリー名を使ってFetch
- topNews[i]にjsonファイルを入れる
- 先ほどのsingleCard関数でそれぞれのReactコンポーネントを生成
- element変数に4で生成したコンポーネントをpushしていく
です。
なお、カテゴリーとカラーの配列は以下です。
javascript
1 const categories = ["Business","Entertainment","General","Health","Science","Sports","Technology"] 2 const colorList = ["#c23685","#d04255","#ffea2a","#3eba2b","#1daf9e","#208dc3","#c97fb4"]
エラー内容
上記ソースにて、returnしているelementが空配列**[]**になってしまいます。
Javascriptにあまり詳しくないので、どのような書き方をすれば適切に値を得られるのかわかっていません、、。
なのでご教授いただけると幸いです。
現在できていること
javascript
1 function Cards() { 2 let element = [] 3 let topNews = [] 4 5 categories.map((data,i) => { 6 const tmp = singleCard(data,colorList[i%7]) 7 element.push(tmp) 8 }) 9 10 return ( 11 element 12 ) 13 }
先ほどのFetch部分を除いた関数は、正常に動作しました。
追記
JAVASCRIPT
1 return ( 2 <View style={{backgroundColor:"#f5f5f5",height:"100%",flexDirection:"row",flexWrap:"wrap"}}> 3 {Cards()} 4 </View> 5 ) 6コード
エラー
Objects are not valid as a React child (found: object with keys {_40, _65, _55, _72}). If you meant to render a collection of children, use an array instead.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/31 03:45
2020/05/31 03:56
2020/05/31 04:06
2020/05/31 04:20
2020/05/31 04:41
2020/05/31 04:52
2020/05/31 05:31