javascript - Reactjs 在单击按钮时多次触发 AJAX 调用(每次单击只需要 1 次!)

标签 javascript ajax reactjs redux axios

我有一个简单的 React 应用程序,其中有一个表单,当用户单击“提交”时,将表单发布到服务器。足够简单。

但是 React 会立即连续多次(通常为 4-5 次)触发 AJAX 调用,从而产生各种问题。我不知道为什么 - 我认为它与 React 的生命周期有关,但我不确定。

我使用 axios 作为 AJAX 库,所以问题可能出在该库上(但我认为不是)。

这是触发代码的方法:

submitEvent(event) {
event.preventDefault();
const apiQueryString = `api/event?${qs.stringify(this.state)}`;
if (this.state.event_title === undefined) {
  alert('Event title is required!');
} else {
  axios.post(apiQueryString)
      .then((result) => {
        this.state.id = result.data[0];
        store.dispatch({
          type: 'ADD_SINGLE_EVENT',
          event: this.state,
        });
        alert('Success creating event!');
        this.setState({}); // clear out old values
        browserHistory.push('/');
      })
      .catch((error) => {
        console.log(error);
        alert('Error with database! See console for output.');
      });
}

这是触发此功能的按钮:

<button onClick={this.submitEvent} className="btn btn-primary">Submit</button>

整个文件的源代码是here ,工作页面为here .

感谢您提供的任何帮助。

最佳答案

问题出在中间件上。在后端处理此 AJAX 请求的方法中,在成功回调 req.getValidationResult() 后,将一个新项目插入到数据库中。此成功回调被调用两次,导致多次数据库插入。

关于javascript - Reactjs 在单击按钮时多次触发 AJAX 调用(每次单击只需要 1 次!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42079549/

相关文章:

javascript - JavaScript 中的自定义计时器

javascript - 为什么我的 `react-scripts` 测试无法识别 Jest 函数 `toMatchObject`?

ajax - 使用 jquery 将项目添加到 jQuery Accordion

javascript - warning.js :45 Warning: setState(. ..):只能更新已安装或正在安装的组件

javascript - FIREBASE admin sdk 不返回 promise ? Node JS

javascript - 如何单击子元素上的父元素

javascript - 如何用例如抑制 JavaScript 函数。有课吗?

javascript - 用户提交表单后显示数据(从 API 调用检索)而不刷新页面

javascript - React - 更新父组件的滚动位置、setState 还是使用引用?

javascript - Intl.DateTimeFormat 无法解析有效的时间值