답변:
는 직선에서 문서 반응 :
fetch('https://mywebsite.com/endpoint/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
firstParam: 'yourValue',
secondParam: 'yourOtherValue',
})
})
(이것은 JSON을 게시하지만 multipart-form과 같은 작업을 수행 할 수도 있습니다.)
fetch
은 React에 내장되어 있으며, 그렇지 않으며 참조 된 문서에 대한 링크가 없음을 나타냅니다. fetch
(작성 시점에) 실험적인 Promise 기반 API 입니다. 브라우저 호환성을 위해 babel polyfill 이 필요 합니다 .
React는 실제로 REST 호출을 수행하는 방법에 대한 의견이 없습니다. 기본적으로이 작업에 대해 원하는 AJAX 라이브러리를 선택할 수 있습니다.
평범한 오래된 JavaScript를 사용하는 가장 쉬운 방법은 다음과 같습니다.
var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
request.send(data);
최신 브라우저에서는을 사용할 수도 있습니다 fetch
.
REST 호출을 수행하는 더 많은 컴포넌트가있는 경우 컴포넌트에서 사용할 수있는 클래스에 이러한 종류의 로직을 배치하는 것이 좋습니다. 예 :RESTClient.post(…)
fetch
또는 superagent
또는 jQuery
또는 axios
위에 배치되는 것보다 다른 아무것도하기 위해 "반작용 바닐라"의 일부가 아닌 또는 뭔가 다른 .
JSON.stringify({"key": "val"})
하고 플라스크 쪽에서request.get_json()
JSON.stringify
.
수퍼 에이전트를 설치할 수 있습니다
npm install superagent --save
그런 다음 서버에 전화를 걸려면
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);
});
2018 년부터 ReactJS 애플리케이션에 async / await를 통합하는보다 현대적인 옵션이 있습니다. axios와 같은 약속 기반 HTTP 클라이언트 라이브러리를 사용할 수 있습니다. 샘플 코드는 다음과 같습니다.
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)
나는이 방법도 정상적인 방법이라고 생각합니다. 하지만 죄송합니다. 영어로 설명 할 수 없습니다 ((
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 / questions', {메소드 : 'POST', 헤더 : {Accept : 'application / json', 'Content-Type': 'application / json',}, 본문 : JSON.stringify (this.state) }). then (응답 => {console.log (응답)}) .catch (error => {console.log (error)})
다음은 get 및 post 둘 다에 대해 수정 된 util 함수 (스택의 다른 게시물)입니다. 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 };
다른 구성 요소에서 아래와 같은 사용법
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);
});
}
예를 들면 다음과 같습니다. 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');
});
jquery.ajax
메소드를 사용 했지만 axios, superagent 또는 fetch와 같은 AJAX 기반 라이브러리로 쉽게 바꿀 수 있습니다.
'{"Id":"112","User":"xyz"}'
URL을 localhost : 8080 / myapi / ui / start로 변경하십시오. XHR 호출이 성공하면 완료된 메소드에 착륙하여 결과를 통해 데이터에 액세스 할 수 있습니다 특성.