2016-06-27 41 views
5

Come è possibile eseguire il rendering di una mappa nidificata all'interno del mio componente jsx?Come eseguire iterazioni di oggetti nidificati e renderizzare all'interno di jsx?

Ho bisogno di fare l'equivalente di un javascript per (chiave in groupItem) {} Vedi sotto.

class MyComponent extends React.Component { 
    render() {  
     var options = this.props.options; 
     return (   
      <div> 
       {options.map(function(groupItem, key){ return (
        /* 
         Unexpected Token if using groupItem.map? 
         {groupItem.map(function(){return })} 

        */ 
       )})} 
      </div> 
     ) 
    } 
} 
Dropdown.defaultProps = { 
    options:[{ 
     'groupX':{ 
      'apple':'lovely green apple', 
      'orange':'juicy orange', 
      'banana':'fat banana' 
     } 
    }] 
} 

JSON.stringify(groupItems) === { 
    'groupX':{ 
     'apple':'lovely green apple', 
     'orange':'juicy orange', 
     'banana':'fat banana' 
    } 
} 

PERCHÉ NON QUESTI LAVORI?

groupItem.map - non funziona

Object.keys (GroupItem) .forEach (function (chiave) { - non funziona

+0

È Object.keys + map, non forEach. 'forEach' è pensato per iterare semplicemente. 'map' conserva i valori restituiti e crea una nuova matrice. –

risposta

12

Si erano quasi destro con l'Object.keys implementazione, (mappa è una proprietà solo per gli array), ma l'errore di sintassi viene dalla confezione {}. non hai bisogno di fuggire, sei già dentro js sintassi.

return (   
    <div> 
     {options.map(function(groupItem, key){ return (
      Object.keys(groupItem).map(function(item){return (
       <YourComponent group={groupItem} item={item} /> 
      );}) 
     );})} 
    </div> 
); 
+1

bello. Grazie. –

+0

grazie. questo mi aiuta molto –

0

ho deciso a creare il mio metodo, a causa della goffaggine di questo.

function each(obj, callback){ 
    return (Array.isArray(obj))? forArray(obj, callback):forObject(obj, callback); 
} 
function forArray(obj, callback){ 
    return obj.map(callback); 
} 
function forObject(obj, callback){ 
    return Object.keys(obj).map(callback); 
} 


class MyComponent extends React.Component { 
    render() {  
     var options = this.props.options; 
     return (   
      <div>      
       {each(options, function(groupItem){ return (      
        each(groupItem, function(key){return ( 

Questo è molto più facile da leggere.

+3

se ti interessa leggibilità, usa anche le funzioni freccia: 'each (options, item => {})' –