2017-01-28 4 views
2

JSXがmap()関数を使用してJSXに1つの行または行を作成できるように、配列の配列を取得してJSXに変換するのに問題があります。リストビュー。renderRow()内のJSXへの配列.map()

renderRow: function(rowData) { //rowData is an Array 
    return rowData.map((data) => { 
     // now data is a single element of my array 
     return <View><Text> <Emoji size={40} name={data} /></Text></View> 
     // also tried () around the above for the return 
    }); 
    }, 
    render: function() { 
    return (
     <ListView contentContainerStyle={styles.list} 
      enableEmptySections={true} 
      initialListSize={500} 
      pageSize={20} 
      dataSource={this.state.dataSource} 
      renderRow={(rowData) => this.renderRow(rowData)} 
     /> 
    ) 
    } 

次のように私はこれを取得するエラーは、次のとおりです。

StaticRenderer.renderは():有効な要素(またはnull)と反応 を返さなければなりません。定義されていない配列、または他の何らかの オブジェクトが返されている可能性があります。

したがって、マップ内で何が起こっているのか、また何らかの理由でJSRがrenderRow()関数内で正しく構築されていないことがわかります。マップを使わないで基本的なJSXを返すのはOKですが、配列のすべての要素に対して行うことができる必要があります。

map()はこれを行う最善の方法ですか?どんな助けでも大歓迎です。

+1

あなたは 'renderRow'関数の戻り値をすることになっているもののドキュメントを見ていたことがありますか?私はそれが配列ではないと思う。したがって、問題はJSXやReactとは特に関係ありません。 –

+0

@Felixあなたは正しいです。私はその関数の戻り値の型のdocを参照しませんでした。それを指摘してくれてありがとう。しかし、それは私にとっても他の誰にも役立たなかった。 –

答えて

2

Reactは要素のリストを扱う方法を知らない。すべてのコンポーネントrenderメソッド、およびrenderRowのようなコールバックは、通常、単一の要素を返す必要があります。

あなたはView、または他の容器要素にアイテムをラップする必要があります。

renderRow: function(rowData) { //rowData is an Array 
    return (
    <View> 
     {rowData.map((data) => { 
     return <View><Text> <Emoji size={40} name={data} /></Text></View> 
     })} 
    </View> 
) 
} 
+0

Ah。私はそれを認識しませんでした。なぜ問題が発生したのかを説明し、サンプルソリューションを提供してくれてありがとう。とても有難い。 –

関連する問題