を削除した後、私は名前と状態でそのスコアを持つ学生のオブジェクトの単純なリストを持っている間違ったデータをレンダリングリストを反応します。はアイテム
彼らの名前は<b>{student.name}</b>
にバインドされていると私は
セット状態を呼び出すことで、このリストと 再レンダリングコンポーネントからの最初の学生を削除するこれまでの時に自分のスコアは
<input type="text" defaultValue={student.score}/>
にバインドされています2番目の生徒の入力タグは、1番目の生徒のスコアを示しています。なぜ私はそれが間違っているのか起こっているのですか?ここ
は私のコードは、あなたの代わりに、学生に固有の値のkey={index}
を使用しているためですhere is mycode in jsbin
class App extends React.Component{
constructor(){
super();
this.state ={
students:[{name:"A",score:10},{name:"B",score:20},{name:"C",score:30}]
}
}
onDelete(index){
this.state.students.splice(index,1);
this.setState(this.state);
}
render(){
return(
<div>
{this.state.students.map((student,index)=>{
return(
<div key={index}>
<b>{student.name}</b> - <input type="text" defaultValue={student.score}/>
<button onClick={this.onDelete.bind(this,index)}>delete</button>
</div>
)
})}
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById("main"));
どうもありがとう下記のようなv4の機能を呼び出すことによってuique IDを生成するためにそれを使用し、その後
以下のように使用することができます。しかし、なぜinput type = "text"以外のタグでも動作しますか? – manas
'input'(つまり' span')や他の入力タイプ以外のタグはありますか? –
'defaultValue'は変更されても更新されません。要素をゴミ箱に移動して再生成する必要があります(つまり、' key'を変更する必要があります)。 'value'を使用した場合はうまくいくかもしれませんが、' onChange'ハンドラを指定しない限り、読み込み専用の入力しか持たないでしょう。 –