2015-07-22 12 views
5

sto iniziando con reactjs e voglio fare una richiesta GET ad un servizio RESTful, ecco il mio codice, qualcuno può aiutarmi per favore?Consumare un servizio RESTful in Reactjs

render: function() { 
$.ajax({ 
    url: "http://rest-service.guides.spring.io/greeting" 
}).then(function(data) { 
    $('.greeting-id').append(data.id); 
    $('.greeting-content').append(data.content); 
return <div style="background-color: #ffffff"> 
        <p class="greeting-id">The ID is </p> 
        <p class="greeting-content">The content is </p> 

       </div>;   
    } 

} 

ho già carico Jquery in HTML con reagito, ma ho ancora cant farlo funzionare, mi manca qualcosa di importante? o c'è un modo migliore per farlo? Non voglio usare un'altra cosa in più, solo reagire e Jquery, o è qualcosa di più necessario?

Grazie per tutto l'aiuto.

risposta

6

Effettuare la richiesta nel metodo componentDidMount e utilizzare il metodo setState per assegnare i dati restituiti dal servizio RESTful allo stato del componente. Nel metodo render è possibile accedervi tramite this.state.greetingId e this.state.greetingContent proprietà:

componentDidMount: function(){ 
    $.ajax({ 
     url: "http://rest-service.guides.spring.io/greeting" 
    }).then(function(data) { 
     this.setState({ 
      greetingId: data.id, 
      greetingContent: data.content 
     }); 
    } 
)}, 
render: function() { 
    return <div style="background-color: #ffffff"> 
       <p class="greeting-id">The ID is {this.state.greetingId}</p> 
       <p class="greeting-content">The content is {this.state.greetingContent}</p> 
      </div>;   
} 

fare riferimento al seguente link per i dettagli: https://facebook.github.io/react/tips/initial-ajax.html

+0

grazie, e sto avendo un piccolo problema, voglio avere una finestra di login e quindi caricare l'elenco di dati dal server, come posso caricare un nuovo componente e scaricare quello precedente? –

+0

È possibile utilizzare operatori condizionali nel metodo di rendering e restituire componenti diversi in casi diversi. Puoi anche usare il router per cambiare la tua vista di login con un'altra vista. Guarda il router di risposta se preferisci questa soluzione: https://github.com/rackt/react-router – const314

+0

im cercando di eseguire l'esempio del link che mi dai, ma non succede nulla uu, ho bisogno di un'altra libreria diversa da reagire e jquery? –

0

Così sto cercando di rispondere al commento successivo per caricare un diverso punto di vista, una volta accesso riesce

vorrei iniziare da avere 4 componenti principali -, login, SUCCESSRESULT, FailureResult

var LoginForm = React.createClass({ 
    render : function(){ 
    return (
     <form onSubmit={this.props.handleSubmit.bind(this, React.findDOMNode(this.refs.login))}> 
     <label for="logininfo">Login Info</label> 
     <input id="logininfo" type="search" placeholder="input" ref="login"/> 
     <input type="submit" value="LogIn" /> 
     </form> 
    ) 
    } 
}); 

var SuccessResult = React.createClass({ 
    render : function(){ 
    var entries = this.props.data; 
    return (
     <div> 
     Is success 
     </div> 
    ) 
    } 
}); 

var FailureResult = React.createClass({ 
    render : function(){ 
    return (
     <div> 
     Is failure 
     </div> 
    ) 
    } 
}); 

var Main = React.createClass({ 
    getInitialState : function(){ 
    return { 

    } 
    }, 

    render : function(){ 
    return (
     <div> 
     {this.state.success ? <SuccessResult entries={this.state.result}/> : <LoginForm handleSubmit={this.handleSubmit.bind(this,'maxea')}/>} 
     {this.state.failure ? <FailureResult /> : null} 
     </div> 
    ) 
    }, 
    handleSubmit : function(loginInfo){ 
    var component = this; 
    $.get('https://api.github.com/users/' + loginInfo). 
     then(function(response){ 
     component.setState({ 
      success : true, 
      result : response.data 
     }) 
     } , 
     function(error){ 
     failure : true 
     }); 
    } 
}); 

// Code goes here 
React.render(
    <Main />, 
    document.getElementById('example') 
); 

È possibile utilizzare un componenteDidUnmount in qualsiasi componente di reazione per eseguire la pulizia una volta terminato con un componente.

+0

ho problemi con questo codice, non ho alcuna differenza, faccio clic su login, ma solo il rendering della finestra e non fare nulla, non visualizzare alcun messaggio di successo o di errore. –

+0

handleSubmit dovrebbe inviare loginInfo. L'ho modificato ora –

+0

ho un login con paswword, avevo letto che devo fare una richiesta di post per farlo, ma non ho una risposta, ho messo un alert() o confirm() nelle funzioni di successo e di errore, ma qualcuno di loro si sta mostrando, quale può essere il problema? –

Problemi correlati