我是 ReactJS 和 UI 的新手,我想知道如何从 ReactJS 代码进行简单的基于 REST 的 POST 调用。
如果有任何示例,那将非常有帮助。
我是 ReactJS 和 UI 的新手,我想知道如何从 ReactJS 代码进行简单的基于 REST 的 POST 调用。
如果有任何示例,那将非常有帮助。
直接来自React 文档:
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。)
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(…)
另一个最近流行的包是:axios
安装 :npm install axios --save
简单的基于 Promise 的请求
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
你可以安装超级代理
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。可以使用基于 Promise 的 HTTP 客户端库,例如 axios。示例代码如下:
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) {
...
}
}
...
}
我认为这种方式也是一种正常的方式。但是对不起,我无法用英语描述((
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) })
这是在 reactjs 中定义和调用 post API 的简单方法。axios
在任何地方使用命令npm install axios
和调用方法安装post req
,它将返回包含 100 个元素的数组。
// Define post_req() Method in authAction.js
import axios from 'axios';
const post_req = (data) => {
return new Promise((resolve, reject) => {
const url = 'https://jsonplaceholder.typicode.com/posts'
const header = {
"Access-Control-Allow-Origin": "*",
"Content-Type: application/json"
}
axios({
method: 'post',
url: url,
data: data,
headers: header
});
.then((res)=>{resolve(res);})
.catch((err)=>{reject(err);})
})
}
// Calling post_req() Method in react component
import React, { Component } from 'react';
import { post_req } from 'path of file authAction.js'
class MyReactComponent extends Component {
constructor(props) {
super(props);
this.state = {
myList:[]
};
}
componentDidMount() {
let data = {
.......
}
this.props.post_req(data)
.then((resp)=>{this.setState({myList:resp.data})})
.catch((err)=>{console.log('here is my err',err)})
}
render() {
return (
<div>
....
</div)
}
}
export default MyReactComponent;
这是基于功能和支持的 ajax 库比较列表。我更喜欢将fetch仅用于客户端开发或isomorphic-fetch用于客户端和服务器端开发。
导入反应,{useState} from 'react'; 从'axios'导入Axios;
导出默认函数 Formlp() {
const url ="";
const [state, setstate] = useState({
name:"",
iduser:""
})
function handel(e){
const newdata={...state}
newdata[e.target.id]=e.target.value
setstate(newdata);
}
function submit(e)
{
e.preventDefault();
// Axios.post(url,{name:state.name,iduser:state.iduser}).then( res=>{console.log(res)});
console.log(state)
}
return ( <div onSubmit={ (e)=> submit(e)}> <input onChange={ (e)=>handel(e) } id="name" value={state.name} placeholder="name" type="text" > <input onChange={ (e)=>handel(e) } id="iduser" value={state.iduser} placeholder="iduser" type="text" >
<button>submit</button>
</form>
</div>
); }
这是一个修改的 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
了方法,但您可以轻松地将其替换为基于 AJAX 的库,例如 axios、superagent 或 fetch。