这是我的render
组件的FormEl
方法。
return <div>
<button type="button" onClick={this.clicked}>click to add 1 input</button>
<Inputs count={this.state.childcount}/>
</div>
在clicked
方法中,我使用childcount
将setState
更新为1
这是Inputs
类
class Inputs extends React.Component {
constructor(props) {
super(props);
console.log("Input constructor is running.");
this.state = {value: '', p: "p", count: props.count};
}
render() {
let c = [];
for (let i = 0; i < this.state.count; i++) {
c.push(
<div key={"id-" + (i * 10)}>
<input type="text" defaultValue={this.state.value}/>
<p> {this.state.p}</p>
</div>);
}
return <div>
{c}
</div>;
}
}
但是,当我更新childcount
中的clicked
时,我看到FormEl
被重新渲染,count
中的<Inputs..
也相应地增加了。但是除了第一次(页面加载)时间,它不会调用constructor
中的Inputs
。
答案 0 :(得分:1)
直接使用this.props.count。
for (let i = 0; i < this.props.count; i++) {
答案 1 :(得分:0)
在这里,Inputs
组件的构造函数方法在挂载后将仅被调用一次。再也不会调用它了。因此,当传入的Inputs
道具与您当前的状态数不同时,您可以做的是在count
组件和setState中使用componentDidUpdate
方法。
否则,您可以按照@lsa4299的建议直接在this.props.count
中使用for
答案 2 :(得分:0)
构造函数只能被调用一次,因此您只能在其中设置一个初始状态。
实际上,由于您没有修改Inputs类的状态,因此根本不需要任何状态。您可以声明const value =“”; const p =“ p”;在您的render方法的顶部。只需使用this.props.count而不是this.state.count
在这种情况下,您可以删除构造函数。
如果以后要修改Component的行为并需要根据新的道具(不是当前情况)设置状态,则可能要检查getDerivedStateFromProps方法。