gpt4 book ai didi

javascript - React中的动态表单如何更新react.js中的嵌套状态字段

转载 作者:行者123 更新时间:2023-12-01 02:01:55 25 4
gpt4 key购买 nike

我的状态:

this.state = {
name: '',
subCatagory: [{ name: '', price: '', customize: [] }],
};

我在react.js中的表单:

{this.state.subCatagory.map((subCatagory, idx) => (
<div className="subCatagory" key={idx}>
<input
type="text"
placeholder={`Enter Dish #${idx + 1} name`}
value={subCatagory.name}
onChange={this.handlesubCatagoryNameChange(idx)}
/>
<input
type="number"
placeholder={`subCatagory #${idx + 1} price`}
value={subCatagory.price}
onChange={this.handlesubCatagoryPriceChange(idx)}
/>
<button
type="button"
onClick={this.handleRemovesubCatagory(idx)}
className="small"
>
Delete
</button>
<button type="button" onClick={this.addNewCust(idx)} className="small">
is cust availble?
</button>
{subCatagory.customize.map((customize, custIdx) => (
<div key={custIdx}>
<input
type="text"
placeholder={`subCatagory #${custIdx + 1} price`}
value={customize.name}
onChange={this.handlesubCatagoryChange(
idx,
'customize',
custIdx
)}
/>
</div>
))}
</div>
))}

我想每次在输入handlesubCatagoryChange中更新值时进行更新,并且我的表单是动态的。,这里我获取了第一个 map 的索引,然后获取了第二个 map 的索引,但无法更新 react 中的状态

最佳答案

您可以使用这样的函数更新数组中的项目

handlesubCatagoryNameChange = idx => e => {
const value = e.target.value;

this.setState(prevState => ({
...prevState,
subCatagory: subCatagory.map((x, i) => {
if (i === idx) {
return {
...x,
name: value
}
}

return x
})
}))
}

(这仅适用于名称,其他字段需要使用相同的方法)

这将使您的 subCategory 数组保持不可变,并且仅更新指定索引上的项目。

对于嵌套数组,您将执行相同的操作 - 像这样(如果我理解正确的话)

handlesubCatagoryChange  = (otherIdx, propertyPath, innerIdx) => e => {
const value = e.target.value;

this.setState(prevState => ({
...prevState,
subCatagory: subCatagory.map((x, i) => {
if (i === otherIdx) {
return {
...x,
[propertyPath]: x[propertyPath].map((y, j) => {
if (j === innerIdx) {
return {
...y,
name: value
}
}

return y
})
}
}

return x
})
}))
}

关于javascript - React中的动态表单如何更新react.js中的嵌套状态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483930/

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