2017-04-19 18 views
0

CODE:間違ったインデックスが割り当てられるのはなぜですか?

handleDeleteClick: function(index) { 
     var newRecipesArray = this.state.recipesArray; 
     newRecipesArray.splice(index-1,1); 
     this.setState({ 
      recipesArray: newRecipesArray 
     }); 
    }, 
    render: function() { 
     var i = 0; 
     var that = this; 

     var recipes = this.state.recipesArray.map(function(item) { 
      i++ 
      return (
       <div key={"div"+i} className="table"> 
        <Recipe key={i} name={item.name} ingredients={item.ingredients} /> 
        <button key ={"edit"+i} onClick={() => { that.handleEditClick(i)}} className="btn edit btn-primary">Edit</button> 
        <button key ={"delete"+i} onClick={() => { that.handleDeleteClick(i)}} className="btn delete btn-danger">Delete</button> 
       </div> 
      ); 
     }); 

     return (
      <div> 
       <h1>React.js Recipe Box</h1> 
       <button className="btn btn-primary" onClick={this.handleClick}>Add Recipe</button> 
       <table> 
        <tbody> 
         <tr> 
          <th>RECIPES</th> 
         </tr> 
        </tbody> 
       </table> 
       {recipes} 
       { this.state.adding ? <AddRecipe handleClose={this.handleClose} handleAdd={this.handleAdd} /> : null } 
       { this.state.editing ? <EditRecipe currentIndex = {this.state.currentIndex} handleClose={this.handleClose} handleEdit={this.handleEdit}/> : null } 
      </div> 
     ); 
    }, 
}); 

SITUATION:

私は、削除をクリックして、それを削除することを具体的にリンクされなければならないの代わりに削除された最後の要素は常にですボタン。

間違いはどこにありますか?どのように修正しますか?

+0

レシピに固有のIDがありますか?インデックスはキーにとって貧しい選択です – Thomas

答えて

1

mapは2番目のパラメータとしてindexを指定するので、別のインデックス変数は必要ありません。また、すべての要素にキーは必要ありませんが、親要素のみ

handleDeleteClick: function(index) { 
     var newRecipesArray = this.state.recipesArray; 
     newRecipesArray.splice(index,1); 
     this.setState({ 
      recipesArray: newRecipesArray 
     }); 
    }, 
    render: function() { 

     var that = this; 

     var recipes = this.state.recipesArray.map(function(item, i) { 

      return (
       <div key={"div"+i} className="table"> 
        <Recipe name={item.name} ingredients={item.ingredients} /> 
        <button onClick={() => { that.handleEditClick(i)}} className="btn edit btn-primary">Edit</button> 
        <button onClick={() => { that.handleDeleteClick(i)}} className="btn delete btn-danger">Delete</button> 
       </div> 
      ); 
     }); 
+0

あなたは本当に正しいです。残念ながら、これはコンポーネントの動作に何も変わりませんでした。最後の要素はまだ削除されていますが、最初の削除ボタンをクリックしても削除されます:/何が原因でしょうか? – Coder1000

+0

関数内のインデックスをログに記録して見ることができますか? –

+0

修正済み!パーフェクト:D – Coder1000

関連する問題