我有以下类组件:
class ConceptPopup extends React.Component {
constructor(props) {
super(props);
this.state = {
attributeForm: []
};
this.addAttributeForm();
}
addAttributeForm() {
//this method adds label and input field to the state array
var array = this.state.attributeForm;
array.push(<div>
<span><b>new Attribute</b></span>
<div>
<label htmlFor="name">Attribute name :</label>
<input name="name"/>
</div>
</div>
);
this.setState({
attributeForm: array
});
}
render() {
return (
<div>
{this.state.attributeForm}
<button onClick={this.addAttributeForm.bind(this)}>ADD ATTRIBUTE</button>
</div>
);
}
}
现在理想的情况是每次点击ADD ATTRIBUTE按钮时都会出现一个新的输入字段。
我目前的情况是,在按钮点击时调用addAttribute方法,状态正确更新,但更改不可见。 由于构造函数中的addAttributeForm,显示的所有内容都是一个输入字段。我试图在点击时强制重新渲染表单但是只会抛出一大堆错误(比如超出最大调用堆栈大小)。
答案 0 :(得分:1)
您需要循环并渲染输入数组
render() {
return (
<div>
{
this.state.attributeForm.map(input => {
return input
})
}
<button onClick={this.addAttributeForm.bind(this)}>ADD ATTRIBUTE</button>
</div>
);
}
答案 1 :(得分:1)
好的,这里有几点:
var array = this.state.attributeForm.slice();
)this.state={}
调用中设置它。不要将数组设置为空,然后调用addAttributeForm()
函数,不必要的步骤array
可能会导致混淆。最好使用像var newAttributeForm = this.state.attributeForm.slice();