1

私はReact JSでテーブルデータをレンダリングしていますが、子の「削除」ボタンをクリックしてテーブル行を非表示にすることができません。私の現在のハンドラと機能をレンダリングし、次のようになりますReact JSで子「削除」ボタンをクリックしたときに親テーブルの行を削除するにはどうすればよいですか?

... 
changeHandler: function(e) { 
... 
}, 

deleteHandler: function(e) { 
    e.currentTarget.closest("tr").style.visibility = "hidden"; 
}, 

render: function() { 
    return (
    <div> 
     <div class="container"> 
      <select onChange={ this.changeHandler.bind(this) }> 
      <option></option> 
      ... 
      </select> 
      <table> 
      <thead> 
       <tr> 
       ... 
       </tr> 
      </thead> 
      <tbody> 
       {data.map(function(row, j) { 
        return <tr key={j}> 
        <td>{row.text}</td> 
        <td><a href="" onClick={this.deleteHandler.bind(this, j)}>delete</a></td> 
        </tr>        
         } 
        )} 
      </tbody> 
     </table>   
    </div> 
    </div> 
    ); 
} 
... 

私は削除アンカーをクリックすると、私はコンソールにこのエラーが表示されます。

Uncaught TypeError: Cannot read property 'bind' of undefined 

なぜ私の削除ハンドラISN私は理解していません私が使用しているchangeHandlerが認識されバインドされていない場合、このイベントをハンドラに当てる方法と親Trを隠すようにターゲットを設定する方法を教えてください。

+0

たちはコードや小さなチャンク=> codepenの多くを得ることができますか?あなたはフォークできるes6ペンがあります... bind(null、j)を試してみませんか?暗いw/oの例で文字通り撮影。 – Mintberry

+0

これには、削除ハンドラを実装したもののすべてが実装されています。 – kurofune

+0

try [このリンク](https://jsfiddle.net/ssbdnbw8/12/) – kurofune

答えて

1

上記の誤植で訂正した後、私はそれがここではエラーではなかったと思う。それが実際に動作するのを見るために、次のようなフィドルをチェックしてください。行を非表示にするとスタイルの変更が必要になります。

https://jsfiddle.net/vgo52rey/

問題はフィドルのフィルタ機能でthisの結合です。これを他のメソッドに抽象化して、これへの参照を別の変数に格納できるようにしてから、this.deleteまたはthis.deleteHandlerへの参照を保持することができます。あなたのrenderメソッドで

delete: function(e) { 
    e.currentTarget.closest("tr").style.visibility = "hidden"; 
}, 

renderRows: function() { 
    var shouldIRender =(row) => (this.state.filter === row.status || this.state.filter === ""); 
    var self = this 
    return requests.filter(shouldIRender).map(function(row, j) { 
        return <tr key={j}> 
        <td style={tdStyle}>{row.title}</td> 
        <td style={tdStyle}>{row.status}</td> 
        <td style={tdStyle}>{row.created_at}</td> 
        <td style={tdStyle}>{row.updated_at}</td> 
        <td style={tdStyle}><a href="#" onClick={self.delete}>delete</a></td> 
        </tr>        
         } 
        ) 
}, 

今はただ、これはメソッドの戻り値renderRows供給することができます:

   <tbody> 
       {this.renderRows()} 
      </tbody> 
+0

私はお詫び申し上げます。これは私の誤植でした。私はオペレーションを修正しました。あなたが私のjsfiddleを見たいのであれば、[こちらは](https://jsfiddle.net/ssbdnbw8/12/)です。 – kurofune

+0

大丈夫、私はそれを働かせました、私は私の答えを編集し、フィドルを投稿します – jmancherje

+0

ありがとう、本当にありがとう! – kurofune

関連する問題