javascript - 在 React.js 中处理多列列表时出错
问题描述
在这里,我有一个包含两个字段的列表 - 名称和类型。我正在尝试添加这两项的行并将它们保存在状态中,以便相应的名称和类型在一个对象中,在状态列中,这是一个对象数组。但是在添加选项之后,即在handleColumnChange 函数中,只有“类型”属性被保存在列数组中。我认为我使用了错误的分配运算符,但我无法弄清楚如何获取其中两个输入并同时更新状态。任何有关如何处理此问题的帮助将不胜感激。
import React, { Component } from 'react'
class App extends Component {
constructor () {
super()
this.state = {
columns: [{ name: '' ,type:''}],
}
}
handleColumnChange = (idx) => (event) => {
const newColumns = this.state.columns.map((column, sidx) => {
if (idx !== sidx){
return column;
} else{
let name,type;
if (event.target.name === "name"){
name=event.target.value;
}
if (event.target.name === "type")
type=event.target.value;
return { ...column, name: name, type:type };
}
});
this.setState({ columns: newColumns });
}
handleSubmit = (evt) => {
const { columns } = this.state;
alert(JSON.stringify(this.state));
}
handleAddColumn = () => {
this.setState({ columns: this.state.columns.concat([{
name:'',type:''}]) });
}
handleRemoveColumn = (idx) => () => {
this.setState({ columns: this.state.columns.filter((s, sidx) => idx
!== sidx) });
}
render () {
return (
<div className='App'>
<p className='App-intro'>
<form onSubmit={this.handleSubmit}>
<h4>Columns</h4>
{this.state.columns.map((column, id) => (
<div className="Columns">
<input
type="text"
name="name"
placeholder={`ColumnName #${id + 1} name`}
value={column.name}
onChange={this.handleColumnChange(id)}
/>
<input
type="text"
name="type"
placeholder={`ColumnType #${id + 1} name`}
value={column.type}
onChange={this.handleColumnChange(id)}
/>
<button type="button" onClick={this.handleRemoveColumn(id)} className="small">-</button>
</div>
))}
<button type="button" onClick={this.handleAddColumn} className="small">Add Column</button>
<button
onClick={() => {
console.log("This is the state",this.state);
}}
>
Submit
</button>
</form>
</p>
</div>
)
}
}
export default App
解决方案
推荐阅读
- java - 在测试环境中使用全局变量
- repast-simphony - Repast:如何覆盖现有文件而不是在文本接收器中自动创建新文件
- python - jupyter notebook keyerror: 148 on running lambda
- python - 尽管我没有创建类的实例,但为什么要从类中打印(x)?
- google-apps-script - 使用 GmailApp 类的任何 sendEmail 函数而不被列入黑名单或让我的 Gmail 帐户被 Google 停用?
- amazon-web-services - 如何从 Lambda 函数连接到私有 EKS 终端节点
- python - 将 find_all 与 BeautifulSoup 一起使用时仅获取 [ ](括号)
- reactjs - 如何在 React 中使用 API webhook 来接收通知
- sql - 我有这个问题,但我不知道如何回答“举两个不同粒度的例子。?
- python - 在修补程序中将条目初始化为 0