reactjs - 处理多个 React 表单输入并更新组件的状态
问题描述
我有一个带有多个输入的表单。在提交表单时,我想更新组件状态并向其添加新条目。
问题,我不知道如何获取所有输入值,我应该使用refs吗?
想要的结果应该如下所示:
state = { persons: [{Per1},{Per2},{Per3} etc] }
或者
state = { persons: {{Per1},{Per2},{Per3} etc} }
不知道什么是最好的...
这是我的代码:
class PersonForm extends Component {
import React, { Component } from "react";
import Input from "./input";
class PersonForm extends Component {
state = {
persons: {
name: "urlTests",
age: "titre",
surname: "auteur",
date: "2014-02-10T10:50:42",
},
};
handleOnChange = (e) => {
console.log(e.currentTarget.value);
console.log(e.currentTarget.name);
const persons = { ...this.state.persons };
persons[e.currentTarget.name] = e.currentTarget.value;
this.setState({ persons }); // Yes I can see the component getting updated in debug mode but do I need this?
};
// personForm
handleOnSubmit = (e) => {
e.preventDefault();
console.log("onSubmit");
const persons = { ...this.state.persons };
console.log(persons);
const newPersons = { !!!!!!!!! CREATE AN OBJECT OF THE PERSON INPUTS VALUES + PREVIOUS STATE};
console.log(newPersons);
this.setState({ persons: newPersons }); // UPDATE THE STATE
};
render() {
return (
<div id="contB">
<h1>PersonForm Component</h1>
<form onSubmit={this.props.onSubmit}>
<Input
// onChange={this.handleOnChange}
type="text"
name="name"
placeholder="name"
/>
<Input
// onChange={this.handleOnChange}
type="text"
name="surname"
placeholder="Auteur"
/>
<Input
// onChange={this.handleOnChange}
type="number"
name="age"
placeholder="age"
/>
<Input
// onChange={this.handleOnChange}
type="date"
name="date"
placeholder="Date"
/>
<button type="submit">Create Person</button>
</form>
</div>
);
}
}
export default PersonForm;
解决方案
我的第一个问题是为什么你需要在一个“PersonForm”中存储多个“Persons”?我希望这个组件的状态只包含一个人的状态,而不是多个。
如果您想显示多个人,我建议将道具传递给此组件,例如handleSubmit
. 并在父组件中管理多人。
关于:
想要的结果应该如下所示:
状态 = { 人员:[{Per1}、{Per2}、{Per3} 等] }
或者
状态 = { 人员:{{Per1}、{Per2}、{Per3} 等} }
第二个不是有效的Javascript。你的选项要么是一个 Persons 数组,要么是一个带有一些键值的 Object。在人的情况下,身份证可以工作。例如:
{
people: {
"id1": { ... },
"id2": { ... },
}
}
在不了解上下文的情况下,我建议只使用一个数组,因为它更简单,并且可能足以满足您的用例。
关于:
问题,我不知道如何获取所有输入值,我应该使用 refs 吗?
只需创建多个处理程序。每个字段一个。例如:
handleNameUpdated = () => { ... }
handleSurnameUpdated = () => { ... }
handleAgeUpdated = () => { ... }
handleDateUpdated = () => { ... }
然后在您的处理程序中更新相关的状态。例如:
handleNameUpdated = () => {
this.setState({ name: e.currentTarget.value });
}
推荐阅读
- php - 无法加载动态库“C:\php\ext\php_pthreads.dll”
- c++ - 在 g++ 中找不到可选的
- angular - [Angular 6]动态地将代码传递给组件
- php - 如何获取 PHP 中内置函数的所有参数(参数)及其各自的值,包括可选参数(如果有)?
- java - 将从 Oracle Java 切换到 OpenJDK 以避免从 2019 年 1 月开始支付工作费用
- ios - WKWebview iOS 11 点击手势 + 外部链接
- android - 满足条件时如何自动打开我的应用程序?
- python - Python并排matplotlib箱线图与颜色
- postgresql - HikariPool-1 - 无法验证连接 org.postgresql.jdbc.PgConnection@2a84e649(此连接已关闭。)
- python - 如何从系数矩阵打印回归方程?