2015-04-30 11 views
31

Ad esempio, voglio mostrare un elenco di nomi. Quindi volevo fare qualcosa del genere:Come concatenare i componenti JSX in React Native

var returnValue; 
for (eachName of _names) { 
    returnValue += (
    <TouchableHighlight 
    onPress={() => this._onPressButton}> 
     <Text> 
     {eachName} 
     </Text> 
    </TouchableHighlight>); 
} 
return returnValue; 

Tuttavia, ciò non è valido. Il che mi porta alla mia domanda: come concatenare una quantità dinamica di componenti JSX in React Native.

risposta

64

Figure Lo capisco appena chiedo StackOverflow. Il codice deve essere messo in un array:

var returnValue = []; 
for (var i = 0; i < _names.length; i++) { 

    returnValue.push(
    <TouchableHighlight onPress={() => this._onPressButton}> 
     <Text> 
     {_names[i]} 
     </Text> 
    </TouchableHighlight>); 
} 
return returnValue; 

Ci sono anche maggiori informazioni qui: http://facebook.github.io/react/docs/multiple-components.html#dynamic-children

+2

impressionante, grazie. Credo che tu possa accettare la tua risposta, invece, è ovviamente l'unica persona che sta cercando quando arriva a questa domanda. – lakesare

+0

Ben fatto. Non penserei mai a una serie di elementi come a una possibile soluzione. – reinaldoluckman

+0

Ciao ragazzi, sto ricevendo errore: un elemento React valido (o null) deve essere restituito. Potresti aver restituito undefined, un array o qualche altro oggetto non valido. :( – GONeale

11

Forse un modo più elegante:

return <View> 
{_names.map((eachName) => { 
    return (
    <TouchableHighlight onPress={() => this._onPressButton}> 
     <Text> 
     {eachName} 
     </Text> 
    </TouchableHighlight> 
); 
})} 
</View> 
+0

Mentre sono d'accordo sul fatto che questo approccio è comune, non è in grado di risolvere ogni problema (altrimenti non sarei qui alla ricerca di alternative) –

0
let returnValue = _names.map(eachName => 
<TouchableHighlight 
    onPress={() => this._onPressButton}> 
     <Text> 
     {eachName} 
     </Text> 
    </TouchableHighlight>); 
return returnValue;