ストーリーは、ボブ、サリー、ジャックを箱に入れることができるはずです。どちらも箱から取り出すこともできます。取り外すと、スロットは残りません。
people = ["Bob", "Sally", "Jack"]
私は今、 "Bob"を削除する必要があります。新しい配列は次のようになります。
["Sally", "Jack"]
これが私の反応コンポーネントです。
...
getInitialState: function() {
return{
people: [],
}
},
selectPeople(e){
this.setState({people: this.state.people.concat([e.target.value])})
},
removePeople(e){
var array = this.state.people;
var index = array.indexOf(e.target.value); // Let's say it's Bob.
delete array[index];
},
...
ここに私はあなたにそれがもっとあるのであなたに最小限のコードを示す(onClickなど)。重要な部分は、配列から "Bob"を削除、削除、破棄することですが、removePeople()
は呼び出されても機能しません。何か案は?私は これを見て でしたが、私はReactを使っているので私は何か悪いことをしているかもしれません。
配列から要素を削除するには、次のようにします。
array.splice(index, 1);
あなたの場合:
removePeople(e) {
var array = [...this.state.people]; // make a separate copy of the array
var index = array.indexOf(e.target.value)
if (index !== -1) {
array.splice(index, 1);
this.setState({people: array});
}
},
Reactを使うときは、状態を直接変更してはいけません。オブジェクト(またはArray
、これもオブジェクトです)が変更された場合は、新しいコピーを作成する必要があります。
他の人たちはArray.prototype.splice()
を使うことを提案しましたが、そのメソッドはArrayを変更するので、Reactと一緒にsplice()
を使わない方が良いです。
新しい配列を作るのにArray.prototype.filter()
を使うのが最も簡単です:
removePeople(e) {
this.setState({people: this.state.people.filter(function(person) {
return person !== e.target.value
})});
}
ES6を使用したAleksandr Petrov氏の回答のちょっとした変化
removePeople(e) {
let filteredArray = this.state.people.filter(item => item !== e.target.value)
this.setState({people: filteredArray});
}
.splice
を使って配列から項目を削除します。 delete
を使用すると、配列のインデックスは変更されませんが、特定のインデックスの値はundefined
になります。
splice() メソッドは、既存の要素を削除したり新しい要素を追加したりすることによって配列の内容を変更します。
構文:array.splice(start, deleteCount[, item1[, item2[, ...]]])
var people = ["Bob", "Sally", "Jack"]
var toRemove = 'Bob';
var index = people.indexOf(toRemove);
if (index > -1) { //Make sure item is present in the array, without if condition, -n indexes will be considered from the end of the array.
people.splice(index, 1);
}
console.log(people);
最初に値を定義するのがとても簡単です
state = {
checked_Array: []
}
今、
fun(index) {
var checked = this.state.checked_Array;
var values = checked.indexOf(index)
checked.splice(values, 1);
this.setState({checked_Array: checked});
console.log(this.state.checked_Array)
}
remove_post_on_list = (deletePostId) => {
this.setState({
postList: this.state.postList.filter(item => item.post_id != deletePostId)
})
}
removePeople(e){
var array = this.state.people;
var index = array.indexOf(e.target.value); // Let's say it's Bob.
array.splice(index,1);
}
Redfer doc 詳細情報
setState
の使用を忘れました。例:
removePeople(e){
var array = this.state.people;
var index = array.indexOf(e.target.value); // Let's say it's Bob.
delete array[index];
this.setState({
people: array
})
},
しかし、filter
を使用する方が配列を変更しないため、より適切です。例:
removePeople(e){
var array = this.state.people.filter(function(item) {
return item !== e.target.value
});
this.setState({
people: array
})
},
チャンススミスが言ったように配列を変異させたようにした 'splice'の使用についていくつかの回答が言及しました。元の配列のコピーを作成するメソッド呼び出し 'slice' ( 'slice'のドキュメントはこちら) を使用することをお勧めします。