2015-02-15 10 views
13

Sono un principiante di ReactJS e sto appena iniziando con the example code on React's official site. Quando sto provando il codice nella sezione 'Fetching from the server', non riesco a farlo funzionare.ReactJS non recupera i dati dal server quando si utilizza l'attributo 'url'

Ho provato sia il percorso relativo

React.render(
    <CommentBox url="../data/data.json" />, 
    document.getElementById('content') 
); 

e percorso assoluto

React.render(
    <CommentBox url="http://localhost/path/to/data.json" />, 
    document.getElementById('content') 
); 

Ma nessuno di loro ha funzionare correttamente. Quando ho estratto il pannello Rete nello strumento di sviluppo di Chrome, ho visto che la pagina non inviava nemmeno la richiesta di data.json. Quindi ho ricevuto un errore di Cannot read property 'comments' of undefined. più

codice:

var Comment = React.createClass({ 
    render: function() { 
    return (
     <div className="comment"> 
     from {this.props.author} <br/> 
     {this.props.children} 
     </div> 
    ); 
    } 
}); 

var CommentList = React.createClass({ 
    render: function() { 
    var commentNodes = this.props.comments.map(function(comment){ 
     return (
     <Comment author={comment.author}> 
      {comment.text} 
     </Comment> 
    ); 
    }); 
    return (
    <div className="comment-list"> 
     {commentNodes} 
    </div> 
    ); 
    } 
}); 

var CommentForm = React.createClass({ 
    render: function() { 
    return (
     <div className="comment-form"> 
     Hello, I am a comment form. 
     </div> 
    ); 
    } 
}); 

var CommentBox = React.createClass({ 
    render: function() { 
    return (
     <div className="comment-box"> 
     <h1>Comments</h1> 
     <CommentList comments={this.props.data.comments} /> 
     <CommentForm /> 
     </div> 
    ); 
    } 
}); 

// ========== This won't work =========== 
// React.render(
// <CommentBox url="./data/data.json" />, 
// document.getElementById('content') 
//); 

// =========== This works. =========== 
$.ajax({ 
    type: "GET", 
    url: "./data/data.json", 
    dataType: "json", 
}).done(function(res){ 
    React.render(
    <CommentBox data={res} />, 
    document.getElementById('content') 
); 
}); 

sarà apprezzato Qualsiasi tipo di aiuto.

Grazie.

+2

Puoi condividere più del tuo codice? Stai facendo una richiesta 'GET' nel tuo componente per recuperare i dati' JSON'? Ecco un [ottimo esempio] (http://facebook.github.io/react/tips/initial-ajax.html) su come recuperare i dati dal server. –

+0

@BrettDeWoody VERAMENTE un grande esempio per un principiante come me. Grazie! :) – hudidit

+0

Ho pensato esattamente la stessa cosa, grazie per il tuo post :) :) – Rocklan

risposta

11

Un po 'più in basso nella pagina di React Tutorial, eseguono una richiesta AJAX nella proprietà componentDidMount della classe CommentBox React.

È necessario effettuare una richiesta AJAX GET per i dati desiderati nella funzione componentDidMount nella classe CommentBox.

+0

Grazie! Pensavo che React avrebbe fatto un po 'di magia con l'attributo 'url' e ottenere i dati ... totalmente sbagliato ... Grazie per il tuo suggerimento. Ora capisco :) Davvero dovrebbe aver letto l'articolo prima di fare una domanda. – hudidit

+0

Felice di aiutare. Buona fortuna per l'apprendimento Reagire! – JohnT

5

Il React docs consiglia di eseguire una richiesta GET in componentDidMount() e di memorizzare i dati in stato.

Prima, inizializzare le variabili di dati:

getInitialState: function() { 
    return { 
    dataVar1: '' 
    }; 
} 

Poi recuperare i dati utilizzando $.get():

componentDidMount: function() { 
    $.get('URL-TO-FETCH-DATA-FROM', function(result) { 
    if (this.isMounted()) { 
     this.setState({ 
     dataVar1: result 
     }); 
    } 
    }.bind(this)); 
} 

dove $.get è la funzione di scorciatoia jQuery AJAX. In render() i dati possono quindi essere visualizzati:

render: function() { 
    return (
    <div> 
     {this.state.dataVar1} 
    </div> 
); 
} 
+0

Un buon esempio di utilizzo di una chiamata jQuery ajax con React. Grazie. – CompanyDroneFromSector7G

Problemi correlati