2015-05-01 33 views
27

Come devo gestire le richieste ajax in un'applicazione web abbastanza tradizionale? In particolare con l'utilizzo di React per le visualizzazioni, pur avendo un back-end che gestisce dati come il testo e cosa no, ma usando ajax per salvare automaticamente le interazioni dell'utente come ad esempio la commutazione delle opzioni o il gradimento di un post sul server.Gestione di ajax con React

Devo usare solo jQuery per questo, o qualcosa di simile a Backbone può essere più vantaggioso?

+1

Date un'occhiata a flusso e come le persone sono occupa delle AJAX lì: http://stackoverflow.com/questions/ 26632415/where-should-ajax-request-be-made-in-flux-app – DesignerGuy

+0

È possibile utilizzare entrambi. Tocca a voi. Se hai già qualche roba Backbone, puoi continuare a usarlo. –

+0

Uso jQuery per fare in modo che le chiamate AJAX utilizzino React con un backend Django. – PythonIsGreat

risposta

37

Nel caso in cui qualcuno si sia imbattuto in questo e non lo sappia, jQuery rende super facile inviare chiamate AJAX. Poiché React è solo JavaScript, funzionerà come qualsiasi altra chiamata jQuery AJAX.

La documentazione di React utilizza jQuery per effettuare la chiamata AJAX, quindi presumo che sia sufficiente per la maggior parte degli scopi, indipendentemente dallo stack.

componentDidMount: function() { 
    $.ajax({ 
     url: this.props.url, 
     dataType: 'json', 
     cache: false, 
     success: function(data) { 
     this.setState({data: data}); 
     }.bind(this), 
     error: function(xhr, status, err) { 
     console.error(this.props.url, status, err.toString()); 
     }.bind(this) 
    }); 
    }, 
+13

È un'enorme libreria da usare solo per un wrapper AJAX. La versione compressa di 2.x che hanno in download è di 82 KB. Questo è un sacco per un wrapper che probabilmente può essere scritto in poche codeline sufficienti per adattarsi allo schermo. – ivarni

+3

Sì, hai ragione, ma c'è ancora così tanto che uso jQuery per, oltre alla semplice chiamata Ajax. È un problema scaricarlo con React, ma jQuery è ancora troppo utile per liberarmi del tutto. – PythonIsGreat

+2

Sull'argomento del jquery è enorme: le alternative includono superagent e reqwest. Entrambi hanno API molto simili ma Superagent è solo 10kB al confronto. –

8

non vorrei usare JQuery, dal momento che le chiamate AJAX è in realtà non è quel complesso e JQuery è una abbastanza grande dipendenza. Vedere la nota di vanillajs su come effettuare chiamate AJAX senza librerie: http://vanilla-js.com/

+0

L'uso di 'jQuery' non è consigliato, preferisco usare' fetch'. – AmerllicA

+1

Infatti. 'Fetch' sono in questi giorni la soluzione goto per fare richieste HTTP –

13

È possibile utilizzare JavaScript API di recupero, supporta anche GET e POST, oltre a promemoria di bilding.

fetch('/api/getSomething').then(function() {...}) 
+2

Come gestite l'annullamento di una richiesta in volo? –

+0

al momento questa non è una buona opzione per la risposta nativa: http://caniuse.com/#feat=fetch – circuitry

+1

Ovviamente è possibile utilizzare il recupero con React Native (I do) Il collegamento fornito mostra la compatibilità del browser. React non è una tecnologia browser (ibrida), quindi puoi semplicemente includere il recupero tramite npm. – Plaul

16

Gentilmente checkout la documentazione ufficiale di Facebook su Complementary Tools a https://github.com/facebook/react/wiki/Complementary-Tools

Essi si limita a raccomandare pochi dati recupero API come

  • superagent: Un leggero libreria "isomorfe" per le richieste AJAX.
  • reqwest: AJAX tutto da capo. Include il supporto per xmlHttpRequest, JSONP, CORS e CommonJS Promises A. Il supporto del browser torna a IE6.
  • react-ajax: Componente richiesta Ajax per React.
  • axios: Client HTTP basato su promessa per il browser e node.js.

Il mio preferito personale sarebbe axios a causa di promesse che funziona nel browser come pure enj dei nodi.

+0

L'uso di 'react-ajax' è ridicolo, non riesco a scoprirlo, preferisco usare' fetch' e usare 'async/await' per una migliore comprensione e una fluente codifica. – AmerllicA

0

Io sicuramente ti offro per usare Fetch API. È molto semplice da capire, supporta tutti i metodi ed è possibile utilizzare async/await anziché promise/then e richiamare l'inferno.

Ad esempio:

fetch(`https://httpbin.org/get`,{ 
    method: `GET`, 
    headers: { 
     'authorization': 'BaseAuth W1lcmxsa=' 
    } 
}).then((res)=>{ 
    if(res.ok) { 
     return res.json(); 
    } 
}).then((res)=>{ 
    console.log(res); // It is like final answer of XHR or jQuery Ajax 
}) 

In modo migliore o async/await modo:

(async function fetchAsync() { 
    let data = await (await fetch(`https://httpbin.org/get`,{ 
           method: `GET`, 
           headers: { 
            'authorization': 'BaseAuth W1lcmxsa=' 
           } 
          })).json(); 
         console.log(data); 
})(); 
Problemi correlati