You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React使用useState时表单提交POST请求payload数据清空问题求助

问题修复方案

你当前的代码存在3个明确的可复现错误,按优先级修复即可解决请求无响应的问题:

1. 阻止表单默认提交行为

你的提交按钮是type="submit"属性,放在form标签内点击时会触发浏览器默认的表单提交、页面刷新逻辑,会直接中断刚触发的异步Axios请求,导致控制台没有后续输出。
修复方法:给提交函数添加事件参数,调用preventDefault()阻止默认行为:

const submitPromise= (e) => {  
  e.preventDefault()
  // 剩下的原有逻辑
}

2. 修正非法的请求URL

你当前写的URL是字符串'https://hookahsite-backend.herokuapp.com || https://localhost:8000 ',字符串内的||不会被识别为JS逻辑判断,这是一个完全不合法的请求地址,自然无法发送请求。
修复方法:按环境判断选择对应请求地址,注意本地开发一般用http协议而非https:

const baseUrl = process.env.NODE_ENV === 'development' 
  ? 'http://localhost:8000' 
  : 'https://hookahsite-backend.herokuapp.com'
Axios.post(baseUrl, custData)
// 测试阶段也可以直接写你Postman测通的单个地址即可

3. 关于请求数据格式的说明

你怀疑的文本/JSON格式问题不存在:Axios默认会自动将传入的对象参数转为JSON字符串,同时设置Content-Type: application/json请求头,只要你Postman测试时用的是JSON格式的请求体,就不需要额外修改。如果后端要求表单格式的请求,再手动调用qs.stringify(custData)转换并设置对应请求头即可。


修正后的完整组件代码

import React, { useState } from 'react';
import Axios from 'axios'

const QuoteForm = () => {
  const [name, setName] = useState("");
  const [email, setEmail] = useState("");
  const [question, setQuestion] = useState("");

  const submitPromise = (e) => {  
    e.preventDefault();
    // 把custData移到函数内部,确保每次提交取的是最新的状态
    const custData = { 
      name: name, 
      email: email, 
      question: question
    };
    console.log('提交的数据:', custData);
    // 这里直接用Postman测通的Heroku地址测试,确认通了再改环境判断
    const baseUrl = 'https://hookahsite-backend.herokuapp.com';
    Axios.post(baseUrl, custData)
      .then((axiosResponse) => { 
        console.log('请求成功,返回数据:', axiosResponse.data);
      })
      .catch((e) => {
        console.log('请求失败,错误信息:', e);
      })
  }

  return(
    <React.Fragment>
      <form id="quoteForm">
        <h1 id="quoteTitle">Quote Help Form</h1>
        <p id="quotePar">Please provide your Name, Contact Email, and what products you would like more information about in this form :</p>

        <label id="formName" className="Form">
          Name:
          <input 
            type="text" 
            name="name" 
            onChange={(event) => { setName(event.target.value);}}
          />
        </label>

        <label id="formEmail" className="Form">
          Email:
          <input 
            type="text" 
            name="email" 
            onChange={(event) => { setEmail(event.target.value);}}
          />
        </label>
        <br/>
        <label id="formQuestion" className="Form" >
          What products would you like to know more about:
          <input 
            type="text" 
            name="help" 
            onChange={(event) => { setQuestion(event.target.value);}}
          />
        </label>

        <br/>
        <br/>

        <button 
          id="quoteSubmit" 
          type="submit" 
          onClick={submitPromise}
        >
          Submit 
        </button>
      </form>
    </React.Fragment>
  )
};

export default QuoteForm;

内容的提问来源于stack exchange,提问作者ben holsinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:36:03