如何从 ReactJS 代码进行休息后调用?

IT技术 reactjs reactjs-flux reactjs-native
2021-04-17 10:54:13

我是 ReactJS 和 UI 的新手,我想知道如何从 ReactJS 代码进行简单的基于 REST 的 POST 调用。

如果有任何示例存在,那将非常有帮助。

6个回答

直接来自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。)

IMO,@amann 在下面更好的答案这个答案暗示fetch已内置于 React 中,但事实并非如此,并且没有指向所引用文档的链接。fetch是(在撰写本文时)一个实验性的基于 Promise 的 API为了浏览器兼容性,你需要一个 babel polyfill
2021-05-27 10:54:13
您必须安装并导入它不要忘记,该fetch()函数不返回data,它只返回一个promise
2021-06-03 10:54:13
哈哈@Divya,在阅读您的评论之前,我正要发表相同的评论。不确定要不要放在 React.createClass 中。另外,我们能否提供一个 React 文档的链接?我试图搜索他们的网站(facebook.github.io/react/docs/hello-world.html)没有成功。
2021-06-06 10:54:13
我们可以修改原始答案以包含导入吗?
2021-06-10 10:54:13
请注意,这是来自 React Native 文档,而不是 React JS 文档,但您也可以在 React JS 中使用 Fetch_API。facebook.github.io/react-native/docs/network.html
2021-06-18 10:54:13

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(…)

是的,如果您要发布 JSON,则必须JSON.stringify先发布。
2021-05-29 10:54:13
看起来如果你使用flask,它可以很好地做JSON.stringify({"key": "val"})然后在flask方面做request.get_json()
2021-06-03 10:54:13
对我来说,这是最好的答案,因为 React 没有内置任何东西。你必须导入fetchorsuperagentjQueryoraxios或其他不属于“vanilla React”的东西才能做上面发布的内容以外的任何事情.
2021-06-04 10:54:13

另一个最近流行的软件包是: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 年及以后,您有一个更现代的选择,即将 async/await 合并到您的 ReactJS 应用程序中。可以使用基于 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) {
           ...
        }
    }
    ...
}
出于某种原因,nodejs 确实解释了await-SyntaxError: await is a reserved word (33:19)
2021-05-29 10:54:13
@prayagupd 您使用的是什么版本的节点?
2021-06-14 10:54:13