【问题标题】:Axios post requests are not working with events using ReactJSAxios 发布请求不适用于使用 ReactJS 的事件
【发布时间】:2021-03-08 09:11:30
【问题描述】:

在过去一周左右的时间里一直很卡,找不到我的问题的任何答案。今天我开始做一些适当的调查。触发事件时,Axios 似乎无法正常工作。这在我的主 PC 上也不起作用,这让我认为这实际上是 Axios 的一个错误。

我已经试过了:

  • 独立重新安装 Axios
  • 卸载我拥有的所有全局依赖项
  • 创建一个新的 React 应用程序
  • 检查正在触发的事件(它们是)
  • 检查我的网络标签(没有显示)

我的 post 请求在作为函数调用时工作正常:

import React from "react";
import axios from "axios";
import "./App.css";

function App() {
  const makeRequest = () => {
    axios.post("http://localhost:5000");
  };

  makeRequest();

  return <div className="app"></div>;
}

export default App;

后端输出:There was a post request!

但是,我的代码在使用事件时不起作用,这适用于 onClickonSubmit(这就是我已经测试过的):

import React from "react";
import axios from "axios";
import "./App.css";

function App() {
  const makeRequest = () => {
    axios.post("http://localhost:5000");
  };

  return (
    <div className="app">
      <button onClick={makeRequest}>Post Request</button>
    </div>
  );
}

export default App;

没有后端输出或前端输出。非常感谢您的帮助!

编辑:我忘了提到的是fetch 工作得非常好,但我真的宁愿尽可能使用 Axios。

【问题讨论】:

  • 对我来说,调用 onClick 是有效的
  • 这是我的 axios 版本 "axios": "^0.21.1",完美运行
  • 谢谢@GokulnathP,我会试试这个版本,看看能不能走运。
  • 让我知道它是否有效

标签: javascript reactjs express axios


【解决方案1】:

将您的 const 更改为一个函数并使用对象传递方法调用它。

import React from "react";
import axios from "axios";
import "./App.css";

function App() {
  function makeRequest (){
    axios.post("http://localhost:5000");
  };

  return (
    <div className="app">
      <button onClick={() => makeRequest()}>Post Request</button>
    </div>
  );
}

export default App;

【讨论】:

  • 感谢您的帮助,但这只是语法错误..
  • 哎呀,{makeRequest} 应该是 makeRequest() ,我已经适当地编辑了上面的代码。
【解决方案2】:

尝试添加更多的 console.log 调用以从前端获取更多调试数据 - 它可以帮助解决问题。

import React from "react";
import axios from "axios";
import "./styles.css";

export default function App() {
  const makeRequest = () => {
    const result = axios
      .post("https://jsonplaceholder.typicode.com/users")
      .then((result) => {
        console.log("Result", result);
      })
      .catch((error) => console.error("Error", error))
      .finally(() => console.log("Request has been made"));
    console.log("Result should be a Promise object", result);
  };

  return (
    <div className="app">
      <button onClick={makeRequest}>Post Request</button>
    </div>
  );
}

上面的代码 sn-p 工作得很好。检查代码 sn -p here,并尝试在您的环境中运行它。如果控制台日志中的信息不会出现或者没有帮助 - 深入了解您用于转换 JSX 代码的环境和工具,构建 JS 并将该信息添加到问题中。可能问题隐藏在那里的某个地方。

【讨论】:

  • 谢谢,这个问题已经解决了。这是因为我没有在package.json 文件中添加proxy
【解决方案3】:

请检查您的 react 应用程序 package.json 文件中是否有 "proxy": "localhost:5000",这将允许 React 将 API 请求代理到使用 Express 构建的 Node.js 服务器。

5000是节点服务器端口。

【讨论】:

  • 是的,它对你来说很好用,这很奇怪。我试过你的 Axios 版本,但也没有用..
  • 您使用的是哪个版本的 Axios?
  • 最新版本。你的代码对我来说很好。问题是 POST 请求,而不是 GET 请求。
  • 我已将以上内容更新为 POST。检查一次。顺便说一句,您使用 post 方法遇到的错误是什么?你检查过标题吗?
  • 如我所说,没有输出。
【解决方案4】:

问题是您正在传递函数而不是调用它。 我会尝试在 onClick 中使用箭头函数这样:

onclick={()=> makeRequest()}

【讨论】:

  • 这与 onClick={makeRequest} 相同。 React 会负责调用它。
  • @GokulnathP 很奇怪,这对我不起作用。编辑:错误的评论区呵呵
【解决方案5】:

我可以看到你没有用 () 调用函数,它应该是 makeRequest()

【讨论】:

  • 这将在不点击按钮的情况下调用一个函数
  • 这将使我的函数在页面加载时运行。
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 2022-01-16
  • 2021-04-27
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
相关资源
最近更新 更多