Antworten:
Direkt aus den React-Dokumenten :
fetch('https://mywebsite.com/endpoint/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
firstParam: 'yourValue',
secondParam: 'yourOtherValue',
})
})
(Dies ist das Posten von JSON, aber Sie können beispielsweise auch ein mehrteiliges Formular erstellen.)
fetch()
Funktion gibt die Daten nicht zurück , sondern nur ein Versprechen .
fetch
, dass sie in React integriert ist, was nicht der Fall ist, und dass kein Link zu den Dokumenten vorhanden ist, auf die verwiesen wird. fetch
ist (zum Zeitpunkt des Schreibens) eine experimentelle Promise-basierte API . Für die Browserkompatibilität benötigen Sie eine Babel-Polyfüllung .
React hat keine wirkliche Meinung darüber, wie Sie REST-Anrufe tätigen. Grundsätzlich können Sie für diese Aufgabe eine beliebige Art von AJAX-Bibliothek auswählen.
Der einfachste Weg mit einfachem altem JavaScript ist wahrscheinlich ungefähr so:
var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
request.send(data);
In modernen Browsern können Sie auch verwenden fetch
.
Wenn Sie mehr Komponenten haben, die REST-Aufrufe ausführen, ist es möglicherweise sinnvoll, diese Art von Logik in eine Klasse einzufügen, die für alle Komponenten verwendet werden kann. Z.BRESTClient.post(…)
fetch
oder superagent
oder jQuery
oder axios
oder etwas anderes , das nicht Teil von „Vanille Reagieren“, um etwas anderes zu tun als das , was oben geschrieben ist .
JSON.stringify({"key": "val"})
und dann auf der Kolbenseiterequest.get_json()
JSON.stringify
es zuerst tun .
Ein weiteres kürzlich beliebtes Paket ist: Axios
Installieren : npm install axios --save
Einfache Promise-basierte Anfragen
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Sie können Superagent installieren
npm install superagent --save
dann für einen Post-Call an den Server
import request from "../../node_modules/superagent/superagent";
request
.post('http://localhost/userLogin')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send({ username: "username", password: "password" })
.end(function(err, res){
console.log(res.text);
});
Ab 2018 und darüber hinaus haben Sie eine modernere Option, die darin besteht, Async / Warten in Ihre ReactJS-Anwendung aufzunehmen. Eine vielversprechende HTTP-Client-Bibliothek wie Axios kann verwendet werden. Der Beispielcode ist unten angegeben:
import axios from 'axios';
...
class Login extends Component {
constructor(props, context) {
super(props, context);
this.onLogin = this.onLogin.bind(this);
...
}
async onLogin() {
const { email, password } = this.state;
try {
const response = await axios.post('/login', { email, password });
console.log(response);
} catch (err) {
...
}
}
...
}
await
-SyntaxError: await is a reserved word (33:19)
Ich denke so auch normal. Aber leider kann ich nicht auf Englisch beschreiben ((
submitHandler = e => {
e.preventDefault()
console.log(this.state)
fetch('http://localhost:5000/questions',{
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(this.state)
}).then(response => {
console.log(response)
})
.catch(error =>{
console.log(error)
})
}
https://googlechrome.github.io/samples/fetch-api/fetch-post.html
fetch ('url / question', {method: 'POST', headers: {Accept: 'application / json', 'Content-Type': 'application / json',}, body: JSON.stringify (this.state) }). then (response => {console.log (response)}) .catch (error => {console.log (error)})
Hier ist eine Liste der Ajax-Bibliotheksvergleiche, basierend auf den Funktionen und der Unterstützung. Ich bevorzuge Fetch nur für die clientseitige Entwicklung oder Isomorphic-Fetch für die clientseitige und serverseitige Entwicklung.
Weitere Informationen zu isomorphic-fetch vs fetch
Hier ist eine util-Funktion modifiziert (ein weiterer Beitrag auf dem Stapel), um beide zu erhalten und zu veröffentlichen. Erstellen Sie die Datei Util.js.
let cachedData = null;
let cachedPostData = null;
const postServiceData = (url, params) => {
console.log('cache status' + cachedPostData );
if (cachedPostData === null) {
console.log('post-data: requesting data');
return fetch(url, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(params)
})
.then(response => {
cachedPostData = response.json();
return cachedPostData;
});
} else {
console.log('post-data: returning cachedPostData data');
return Promise.resolve(cachedPostData);
}
}
const getServiceData = (url) => {
console.log('cache status' + cachedData );
if (cachedData === null) {
console.log('get-data: requesting data');
return fetch(url, {})
.then(response => {
cachedData = response.json();
return cachedData;
});
} else {
console.log('get-data: returning cached data');
return Promise.resolve(cachedData);
}
};
export { getServiceData, postServiceData };
Verwendung wie unten in einer anderen Komponente
import { getServiceData, postServiceData } from './../Utils/Util';
constructor(props) {
super(props)
this.state = {
datastore : []
}
}
componentDidMount = () => {
let posturl = 'yoururl';
let getdataString = { name: "xys", date:"today"};
postServiceData(posturl, getdataString)
.then(items => {
this.setState({ datastore: items })
console.log(items);
});
}
Hier ist ein Beispiel: https://jsfiddle.net/69z2wepo/9888/
$.ajax({
type: 'POST',
url: '/some/url',
data: data
})
.done(function(result) {
this.clearForm();
this.setState({result:result});
}.bind(this)
.fail(function(jqXhr) {
console.log('failed to register');
});
Es wurde eine jquery.ajax
Methode verwendet , aber Sie können sie leicht durch AJAX-basierte Bibliotheken wie Axios, Superagent oder Fetch ersetzen.
'{"Id":"112","User":"xyz"}'
und ändern Sie die URL in localhost: 8080 / myapi / ui / start. Das ist alles. Sobald der XHR-Aufruf erfolgreich ist, landen Sie in der erledigten Methode und haben über das Ergebnis Zugriff auf Ihre Daten Eigentum.