2017-10-30 15 views
1

私はstateにオブジェクトが含まれています。私はobject propertyに基づいてstateからオブジェクトを削除するdelete apiも持っています。ここでは、コードは次のようになります。反応lodash削除しないでください。

deleteItem(item_to_delete){ 
    const del_item = _.find(this.state.bucket_list, bucklistitem => bucklistitem.name === item_to_delete); 
    fetch(url(this.props.api) + '/' + del_item._id, { 
     method: "DELETE", 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
     }, 
    }); 

    _.remove(this.state.bucket_list, bucketlistitem => bucketlistitem.name === item_to_delete); 
    this.setState({ bucket_list: this.state.bucket_list }); 
} 

私は私が悪いである、現在のように変更可能stateを扱っております理解が。したがって、stateのコピーを作成してコピーを変更し、setStateというコードを変更したいと思います。ここでは、コードは次のようになります。

deleteItem(item_to_delete){ 
    let bucket_list_copy = Object.assign({}, this.state.bucket_list); //Copy of state 
    const del_item = _.find(bucket_list_copy, bucklistitem => bucklistitem.name === item_to_delete); 
    fetch(url(this.props.api) + '/' + del_item._id, { 
     method: "DELETE", 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
     }, 
    }); 

    _.remove(bucket_list_copy, { name: item_to_delete }); 
    this.setState({ bucket_list: bucket_list_copy }); 
} 

しかし、これはデータベースからオブジェクトを削除しますが、それはcopied listからは削除されません。何か案は?この

_.remove(bucket_list_copy, bucketlistitem => bucketlistitem.name === item_to_delete); 

+0

スプライスとのカップルの手順をスキップだろうか? – iagowp

+0

私はここで何か間違って見ることはありません。 1. Reactライフサイクルで呼び出されたdeleteItemメソッドはどこにありますか? 2.実際にコードをデバッグし、新しい状態を設定する前にその項目がリストから削除されたことを再度確認しましたか? – klugjo

答えて

1

変更このライン

_.remove(bucket_list_copy, {name: item_to_delete}); 

あなたは​​を見れば、削除2番目の引数としてオブジェクトを受け付けません。

0

あなたはなぜ、上の2番目の引数が二つのバージョンで異なる削除され

const delItemIndex = _.findIndex(this.state.bucket_list, bucklistitem => bucklistitem.name === item_to_delete); 
let newBucketList = this.state.bucket_list.splice(delItemIndex, 1); 

fetch(url(this.props.api) + '/' + this.state.bucket_list[delItemIndex]._id, { 
    method: "DELETE", 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
}); 

this.setState({ bucket_list: newBucketList }); 
関連する問題