我尝试创建具有多个标签的内容,每个标签应包含自己的文本区域,可以在往返每个标签时保留其文本。我在渲染函数之前的代码就是这个
const panes = []
for(let i = 0 ; i < inputValue ; i++) {
const formNumber = "Form: " + (i+1);
panes.push({
menuItem: "Form " + (i+1),
key:{i},
render: () => (
<Tab.Pane >
{i+1}
<Form.TextArea
onChange={this.onChange}
key={i}
/>
</Tab.Pane>
)
});
};
在渲染函数中:
<Tab
grid={{ paneWidth: 12, tabWidth: 2}}
menu={{ fluid: true, vertical: true, tabular: 'right' }}
panes={panes}
/>
更改选项卡时,在选项卡窗格内呈现的for循环中的i值仍然正确,但文本区域中的信息将丢失。我尝试使用下面的代码使用本地状态,然后使用onChange函数进行更新
this.state = {
forms: [{
formNumber: 1,
formText: ''
}]
}
但是在将信息插入表单状态中的正确列表项时遇到了问题。我还尝试创建一个不在像
这样的状态的列表this.form_text = []
然后插入文本并将表单文本区域的值分配给该文本区域,但这似乎是错误的方法
答案 0 :(得分:1)
将i
添加到onChange
参数:
onChange={e => this.onChange(e, i)}
这样您就可以在状态中更新正确的表单:
onChange = (e, i) => {
this.setState({
forms: this.state.forms.map(it => {
if (it.formNumber !== i) return it; // keep other forms as is
return { formNumber: i, formText: e.target.value };
})
});
};