gpt4 book ai didi

forms - 通过表单提交 react 更新两个输入字段中的状态

转载 作者:行者123 更新时间:2023-12-03 13:56:11 25 4
gpt4 key购买 nike

我正在尝试使用 React 制作一个简单的联系表单。最终我将从状态收集的数据发送到数据库,但现在我试图让它在控制台记录正确的值。

现在,电子邮件字段覆盖了名称字段,当我控制台记录这两种状态时,名称会显示,而电子邮件未定义。这是我的 React 组件

import React, { Component, PropTypes } from 'react';
import ContactData from '../data/ContactData.js';


class FormContact extends Component {
constructor(props) {
super(props)
this.state = {
name: '',
email: '',
textArea: ''
}
}

handleChange(event) {
event.preventDefault();
this.setState({
name: event.target.value,
email: event.target.email
})
}

handleSubmit(event) {
event.preventDefault();
console.log(this.state.name + ' ' + this.state.email);
}

render() {
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<label> Name:
<input type="text" placeholder="Name" value={this.state.name} onChange={this.handleChange.bind(this)} />
</label><br />
<label> Email:
<input type="text" placeholder="Email" value={this.state.email} onChange={this.handleChange.bind(this)}/>
</label><br />
<input className="btn btn-primary" type="submit" value="Submit" />
</form>
)
}
}

FormContact.PropTypes = {
subName: PropTypes.string,
subEmail: PropTypes.string
}

FormContact.defaultProps = {
subName: 'Sam',
subEmail: ''
}

class Contact extends Component {
render() {
return (
<div>
<h1>CONTACT PAGE</h1>
<FormContact />
</div>
)
}
}


export default Contact;

最佳答案

如果我明白你想要什么,你可以这样做:

  • 在您所在的州添加一个空对象作为表单值

    formValues: {}

  • 将名称属性添加到您的字段

    <input name="name" .... /> <input name="email" .... />

  • 然后根据该名称更新您在handleChange函数中的状态

    let formValues = this.state.formValues;
    let name = event.target.name; // Field name
    let value = event.target.value; // Field value

    formValues[name] = value;

    this.setState({formValues})
  • 如果值更深一层,您可以使用 value={this.state.formValues["name"]}而不是value={this.state.name} - 其中 name 是输入字段的 name 属性的值

因此,所有内容都应如下所示:

class Test extends React.Component {
constructor(props) {
super(props)
this.state = {
formValues: {}
}
}

handleChange(event) {
event.preventDefault();
let formValues = this.state.formValues;
let name = event.target.name;
let value = event.target.value;

formValues[name] = value;

this.setState({formValues})
}

handleSubmit(event) {
event.preventDefault();
console.log(this.state.formValues);
}

render(){
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<label> Name:
<input type="text" name="name" placeholder="Name" value={this.state.formValues["name"]} onChange={this.handleChange.bind(this)} />
</label><br />
<label> Email:
<input type="text" name="email" placeholder="Email" value={this.state.formValues["email"]} onChange={this.handleChange.bind(this)}/>
</label><br />
<input className="btn btn-primary" type="submit" value="Submit" />
</form>
)
}
}

React.render(<Test />, document.getElementById('container'));

Here is fiddle.

希望这有帮助。

关于forms - 通过表单提交 react 更新两个输入字段中的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com