問題はキー属性にあります。コンポーネントに新しいキーを1つずつレンダリングすると、フィールドが再作成されます。
小さな例は以下のとおりです。私は一意のキーを生成するためにMath.and()を使いました。もちろん、より良いshortidまたは類似
https://www.npmjs.com/browse/keyword/shortid
class InputRenderer extends Component {
constructor() {
super()
this.state = {
inputsCount: 3
}
}
handleInputsCountChange = (newCount) => {
this.setState({
inputsCount: newCount
})
}
renderInputs =() => {
const inputs = []
for (let i = 0; i < this.state.inputsCount; i++) {
inputs.push(<input key={i + Math.random()} />)
}
return inputs
}
render =() =>
<div>
<button onClick={() => this.handleInputsCountChange(3)}>3</button>
<button onClick={() => this.handleInputsCountChange(5)}>5</button>
{this.renderInputs()}
</div>
}
コードを使用するには?あなたの入力を独自のコンポーネントにリファクタリングして、それをループでレンダリングしますか? – aeid
Reactは、あなたが求めているものを達成するために最小限のDOM変更を行います。これはあなたのコードを見ることなく、これが最善の方法だとは言い難いですが、すべてのフィールドを落として(0まで)、それらをバックアップすると、5つの新しいフィールドで終わるはずです。 – user2027202827
あなたのコードの例を表示できますか? – Gayane