gpt4 book ai didi

javascript - 如何处理数组内对象的 onChange(React State)?

转载 作者:行者123 更新时间:2023-12-02 21:51:10 27 4
gpt4 key购买 nike

社区,

我正在尝试构建一个表,其中的行根据对象数组呈现:

this.state = {
tableContent: [
{
id: this.state.tableContent.length,
firstname:"",
lastname:""
},
...
]

每一行显示一个对象。 (本例中为 2 列,n 行)每个单元格也是一个输入字段,因此用户可以操作表格:

<tbody>
{this.state.tableContent.map((row) => {
return(
<tr key={row.id}>
<td><input value={row.firstname} onChange={this.handleFirstNameChange}> </input></td>
...
</tr>
)
})}
</tbody>

我希望每个单元格/输入字段在用户更改输入值和状态时显示更改。因为我要使用 value={row.firstname} 预填充输入字段,所以我需要定义一个 onChange 处理函数来更改目标对象的 的状态/值>名字属性。

那么我的 onChange 处理函数是什么样子的?我尝试使用点差,但到目前为止没有效果......

一些想法:使用标准过程不起作用,因为我有一个嵌套状态(对象数组):

handleChange = (event) => { this.setState({ firstname: event.target.value }) } 

尝试使用扩展运算符也会导致一些奇怪的困惑:(这里的代码有些错误:也许你可以修复它?)

handleFirstNameChange = (event) => {
const {tableContent} = {...this.state};
const currentState = tableContent;
const { firstname, value } = event.target;
currentState[0] = value;
this.setState({ tableContent: currentState});
}

感谢任何帮助!

编辑:下面的代码似乎几乎可以工作。 (感谢@Nikhil)但是现在,每当用户在输入字段中键入内容时,他们键入的每个字母都将替换“row.firstname”的现有字母/值。此外,状态不会自动刷新,因此只有最后输入的字母才会显示/保留。我需要输入字段具有像任何随意输入字段一样的功能。事件.persist();似乎需要保留事件值。

handleFirstNameChange = (id, event) => {
event.persist();
this.setState(prevState => {
tableContent : prevState.tableContent.forEach((row) => {
if(row.id === id) { row.firstname = event.target.value}
})
})
}

输入看起来像这样:

onChange={(event) => this.handleWNRChange(row.id,event)}

最佳答案

我认为这样的事情会起作用。

const handleFirstNameChange = (id, event) => {
event.preventDefault();
const {tableContext} = this.state;

const myRowIndex = tableContext.findIndex((row) => row.id === id);
tableContext[myRowIndex].firstname = event.target.value;

this.setState({ tableContext });
}

这应该就是您所需要的。只需将此方法分配给 input 元素的 onChange 即可。就像这样:

onChange={(event) => this.handleFirstNameChange(row.id, event)}

关于javascript - 如何处理数组内对象的 onChange(React State)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60129438/

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