2015-02-11 24 views
7

Sono nuovo di React e sto diventando un po 'pazzo cercando di capire cosa sto facendo male. Sto provando ad iterare attraverso un array JSON che ricevo da una chiamata Ajax. Quando mi giro il dati funziona perfettamente, ma quando faccio una chiamata AJAX per ottenere gli stessi dati esatti mi undefined is not a function (evaluating 'this.state.list.map()')React js map() undefined non è una funzione

dà la matrice:

[ { "name": "drop1" }, { "name": "drop2" }, { "name": "drop3" } ]

la funzione:

var List = React.createClass({ 
    getInitialState: function() { 
    return {data: {}}; 
}, 
componentDidMount: function() { 
    $.ajax({ 
     url: ACTUAL_URL, 
     dataType: 'json', 
     success: function(data){ 
     this.setState({data: data}); 
     }.bind(this), 
     error: function(xhr, status, err){ 
     console.error(url, status, err.toString()); 
     }.bind(this) 
    }); 
    }, 
    render: function() { 
    return (
     <ul className="droplist"> 
     {this.state.data.map(function(l){ 
      return (<li>{l.name}</li>) 
     })} 
     </ul> 
    ); 
    } 
}); 

Qualsiasi aiuto è molto apprezzato.

+0

In aggiunta al previsto risposta: normalmente non esegui richieste jax da un componente. – zerkms

+0

@zerkms Non sono d'accordo, normalmente lo faresti se non stai usando Flux. –

+0

@limelights anche se non stai seguendo Flux: è necessario utilizzare un altro modello di progettazione architettonica che separa la presentazione dalla persistenza e dalla logica aziendale. – zerkms

risposta

15

Cambia il tuo getInitialState(). Attualmente i tuoi dati sono oggetti letterali e gli oggetti letterali non supportano map(). Cambialo in un array.

+0

Wow ... quella era una soluzione semplice. Grazie! –

2

Nel mio caso stavo cercando di usare array.map ma i miei dati in realtà è stato un oggetto piuttosto che serie in modo da utilizzare Object.keys(data) è il modo giusto per iterare su oggetti:

Object.keys(data).forEach(item => {...}); 
// OR 
Object.keys(data).map(item => {...}); 

Read details here

Problemi correlati