回答:
React docsから直接:
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です。ブラウザ互換性のために、バベルポリフィルが必要になります。
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
or superagent
、jQuery
またはaxios
その他のものをインポートする必要があります。。
JSON.stringify({"key": "val"})
、次にフラスコ側では機能するようですrequest.get_json()
JSON.stringify
まずそれを行う必要があります。
あなたはsuperagentをインストールできます
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アプリケーションに非同期/待機を組み込むというより近代的なオプションがあります。axiosなどのpromiseベースの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'、{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)})
以下は、機能とサポートに基づくajaxライブラリの比較のリストです。クライアント側の開発または同形フェッチのみにフェッチを使用したいを使用するか、クライアント側とサーバー側の両方ので使用するためにます。
同形フェッチとフェッチの詳細については
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呼び出しが成功すると、doneメソッドに到達し、結果を介してデータにアクセスできるようになります。プロパティ。