FormData 在react中提交表单时返回空数据

问题描述 投票:0回答:5

我试图在提交表单时使用

new FormData()
构造函数获取表单数据键值对对象。但它总是返回空数据。

我已经尝试过

event.persist()
来避免反应事件池,但没有任何效果


export default class Test extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleSubmit(event) {
    event.preventDefault();
    const target = event.target;
    const data = new FormData(target);
    console.log(data)
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label htmlFor="username">Enter username</label>
        <input id="username" name="username" type="text" />

        <button>Send data!</button>
      </form>
    );
  }
}

我期待一个包含以下格式的表单数据的对象

{ "username": "Value" }

javascript reactjs dom dom-events form-data
5个回答
33
投票

我认为你需要通过循环来获取它。试试这个

  var formData = new FormData(target);

   for (var [key, value] of formData.entries()) { 
   console.log(key, value);
  }

希望它有效。


2
投票

handleSubmit 应该是这样的。

handleSubmit(event) {
    event.preventDefault();
    const data = new FormData(event.target);
    fetch('my-api', {
      method: 'POST',
      body: data,
    });
  }

表单提交后,在网络选项卡中您将找到带有键值的表单数据。

如果您想访问单个值,

const username = data.get('username');

1
投票

就我而言,我必须使用这个通用代码片段

    const form = event.target;
    const data = {};
    for (let i=0; i < form.elements.length; i++) {
        const elem = form.elements[i];
        data[elem.name] = elem.value
    }

我不知道这种行为的原因,但可能是因为表单内的输入不再是 DOM 的一部分


0
投票

只需详细说明 Zabih 的答案,循环的替代方法是将条目转换为对象

  const submitForm = async (e: FormEvent) => {
    e.preventDefault();

    const form = e.target as HTMLFormElement;

    const formData = new FormData(form);
    const formDataEntries = formData.entries();

    const myData = Object.fromEntries(formDataEntries);
    console.log(myData);
  };

-1
投票

其中之一 如果你使用 React,只需使用 htmlType 标签

<Form.Item>
  <Button type="primary" htmlType="submit" />
    Submit action
  </Button>
</Form.Item>
© www.soinside.com 2019 - 2024. All rights reserved.