我正在尝试创建一个表单供用户提交食谱。我需要将其设置为用户可以单击“+”按钮来添加更多成分或添加更多说明的位置。每个输入旁边还有一个“-”按钮可以将其删除。
我基本上可以正常工作,我可以添加项目。然而,删除这些项目似乎没有任何一致性。
我正在使用 Material UI,我不确定这是否相关。
以下是我正在处理的相关代码,我将在最后链接完整的代码和框。
const [ingredients, setIngredients] = React.useState(
[
{
name: "",
amount: ""
}
]
);
这是我在反应中渲染数组的方式
{ingredients.map((ing, idx) => {
return (
<div key={idx}>
<TextField
id={"ing-name-" + idx}
name={"ing-name-" + idx}
variant="outlined"
label="Ingrediant Name"
value={ing.name}
required
onChange={handleIngredientChange}
/>
<TextField
id={"ing-amt-" + idx}
name={"ing-amt-" + idx}
variant="outlined"
label="Ingredient Amount"
value={ing.amount}
required
onChange={handleIngredientChange}
/>
<Button
id={"ing-remove-" + idx}
variant="contained"
color="secondary"
type="button"
onClick={handleIngredientRemove}
>-</Button>
</div>
)
})}
<Button
variant="contained"
color="primary"
type="button"
onClick={handleIngredientAdd}
>+</Button>
最后是处理添加/删除项目的两个函数
function handleIngredientRemove(event) {
/*
* To remove an element, we just use the array.filter function to genereate a new array without the
* element being deleted
*/
console.log(event.target.id);
let idx = parseInt(event.target.id.split("-")[2]);
console.log("Removing ingredient " + idx);
let newIngredients = ingredients.filter((ingredient, index) => idx !== index);
setIngredients(newIngredients);
}
完整的codesandbox演示https://codesandbox.io/s/happy-herschel-k0oqf
汪汪一只猫
慕无忌1623718
繁星点点滴滴
相关分类