2017-01-28 1 views
2

문자열 배열을 가져 와서 JSX에서 map() 함수를 사용하여 JSX로 '변환'하는 데 문제가있어서 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를 반환하면 정상적으로 작동하지만 내 배열의 모든 요소에 대해이 작업을 수행 할 수 있어야합니다.

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

아. 나는 그것을 깨닫지 못했다. 왜 문제가 발생했는지 설명하고 예제 솔루션을 제공해 주셔서 감사합니다. 매우 감사. –