【发布时间】:2021-01-02 13:50:21
【问题描述】:
我有一个简单的表单(使用 Semantic ui react 库构建),它由一行和几个输入组成,我的目的是让表单在初始渲染时默认为这一行,但允许用户单击按钮添加一个额外的行,效果很好。我需要帮助的地方是能够在用户最终提交之前删除一行。
我将表单字段存储在组件外部的初始变量中(为了便于查看,最重要的是):
const formField = (
<div style={{ display: "flex", flexDirection: "row" }}>
<Form.Select
label="Exercise"
placeholder="Select an exercise"
options={exercises}
/>
<Form.Input label="Sets" placeholder="Enter your sets" type="number" />
<Form.Input label="Reps" placeholder="Enter your reps" type="number" />
</div>
);
然后我将其存储为初始状态:
const [formRow, setFormRow] = useState([formField]);
jsx 包含一个按钮,它将一个新的表单字段(行)连接到状态,然后我将所有字段渲染到页面,给我额外的行
<Form>
{formRow.map((item, i) => (
<Form.Group inline widths="equal" key={i}>
{item}
<Icon
name="close"
onClick={() => setFormRow((cur) => cur.splice(i, 1))}
/>
</Form.Group>
))}
<Button
color="orange"
content="Add an exercise"
onClick={() => setFormRow((prev) => prev.concat([formField]))}
/>
</Form>
当我映射并渲染到页面时,我为每一行添加了一个删除图标,但我无法使用此功能。我尝试只使用 splice 删除相关行,但这不起作用......它还会删除我单击的行之后的所有行(不太清楚为什么)
The form basically looks as such
有谁知道我如何添加一个功能来删除动态创建的表单 jsx 上的每一行?
谢谢。
【问题讨论】:
标签: javascript reactjs