如何从ReactJS代码进行rest post调用?
我不熟悉ReactJS和UI,我想知道如何从ReactJS代码中进行简单的基于REST的POST调用 如果有任何示例,这将非常有用。以下是一个示例: 它使用了如何从ReactJS代码进行rest post调用?,reactjs,reactjs-flux,reactjs-native,Reactjs,Reactjs Flux,Reactjs Native,我不熟悉ReactJS和UI,我想知道如何从ReactJS代码中进行简单的基于REST的POST调用 如果有任何示例,这将非常有用。以下是一个示例: 它使用了jquery.ajax方法,但您可以轻松地将其替换为基于ajax的lib,如axios、superagent或fetch。直接从: (这是发布JSON,但您也可以这样做,例如,多部分表单。)React对如何进行REST调用并没有真正的意见。基本上,您可以选择任何类型的AJAX库来完成此任务 使用简单的旧JavaScript最简单的方法可能是
jquery.ajax
方法,但您可以轻松地将其替换为基于ajax的lib,如axios、superagent或fetch。直接从:
(这是发布JSON,但您也可以这样做,例如,多部分表单。)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);
在现代浏览器中,您也可以使用
如果您有更多的组件进行REST调用,那么将这种逻辑放在一个可以跨组件使用的类中可能是有意义的。例如,RESTClient.post(…)
是基于特性和支持的ajax库比较列表。
我更喜欢只用于客户端开发,或者同时用于客户端和服务器端开发
有关的详细信息,您可以安装superagent
npm install superagent --save
然后对服务器进行post调用
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);
});
另一个最近流行的软件包是: 安装:
npm安装axios——保存
基于承诺的简单请求
到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、 预防默认值()
console.log(this.state)
取('http://localhost:5000/questions',{
方法:“POST”,
标题:{
接受:'application/json',
“内容类型”:“应用程序/json”,
},
正文:JSON.stringify(this.state)
})。然后(响应=>{
console.log(响应)
})
.catch(错误=>{
console.log(错误)
})
}
这里有一个修改的util函数(堆栈上的另一个post),用于get和post.Make 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);
});
}
下面是在reactjs中定义和调用post API的简单方法。使用命令
npm Install axios
安装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;
//在authAction.js中定义post_req()方法
从“axios”导入axios;
const post_req=(数据)=>{
返回新承诺((解决、拒绝)=>{
常量url=https://jsonplaceholder.typicode.com/posts'
常数头={
“访问控制允许来源”:“*”,
“内容类型:应用程序/json”
}
axios({
方法:“post”,
url:url,
数据:数据,
标题:标题
});
.然后((res)=>{resolve(res);})
.catch((err)=>{reject(err);})
})
}
//在react组件中调用post_req()方法
从“React”导入React,{Component};
从“authAction.js文件路径”导入{post_req}
类MyReactComponent扩展了组件{
建造师(道具){
超级(道具);
此.state={
myList:[]
};
}
componentDidMount(){
让数据={
.......
}
此.props.post_请求(数据)
.then((resp)=>{this.setState({myList:resp.data})})
.catch((err)=>{console.log('这是我的err',err)})
}
render(){
返回(
....
非常感谢您提供的示例:)。我还想了解我的服务是否需要JSON格式的数据。那么需要做哪些更改?任何类型的信息都会非常有用。因此,当我使用curl命令访问端点时,它就像curl-v-X POST-d'{“Id”:“112”,“User”:“xyz”}'那么我如何调用这样的服务。创建一个名为data的变量,使用'{“Id”:“112”,“User”:“xyz”}“
并将URL更改为localhost:8080/myapi/ui/start,也就是说,一旦XHR调用成功,您将在done方法中登录,并且您将可以通过result属性访问数据。您必须这样做。别忘了,fetch()
函数不返回数据,它只返回一个.haha@Divya,我正要在阅读你的之前发表同样的评论。不确定是否将其放在React.createClass中。另外,我们可以有一个React文档的链接吗?我试图搜索他们的网站()未成功。我们可以修改原始答案以包含导入吗?IMO,@amann有一个。此答案意味着fetch
内置于React中,而React中没有,并且没有指向引用文档的链接。fetch
是(在撰写本文时)。对于浏览器兼容性,您需要。注意,这是来自React原生文档,而不是React JS文档,但您也可以在React JS中使用Fetch_API。对我来说,这是最好的答案,因为React没有内置任何内容。您可以导入Fetch
或superagent
或jQuery
或axios代码>或其他不属于“香草反应”的内容,以便执行上面发布的内容以外的任何操作。看起来,如果您使用的是flask,它可以很好地执行JSON.stringify({“key”:“val”})
,然后在flask端执行request.get_JSON()
是的,如果你发布的是JSON,你必须先将其字符串化。你能选择帮助你的答案吗?出于某种原因,nodejs会解释await
-语法错误:await是一个保留字(33:19)
@prayagupd你使用的是什么版本的node?
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);
});
}
// 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;