2016-06-23 29 views
1

申し訳ありませんが、この質問は以前に回答されている場合。私はそれを探してみました。私は本当に答えを得るために何を検索するか分からない。私はReactの初心者ですので、どんな助けでも大歓迎です。配列から返されるすべてのコンポーネントでボタンをどのように動作させることができますか? ReactJS

のlistItems変数の中では、私は項目配列、ボタンで各項目ごとにコンポーネントを返却しています。各コンポーネントのボタンでハンドルを放したい場合は、の機能を解除してください。現在、コンソールでエラーが発生します: "handleRemove は定義されていません"。

var TaskListComponent = React.createClass({ 
 
    
 
    getInitialState : function(){ 
 
    return { 
 
     items:["To do item 1","To do item 2","To do item 3"] 
 
    }; 
 
    }, 
 

 
    handleRemove : function(){ 
 
    console.log("test") 
 
    }, 
 
              
 
    render: function(){ 
 
    var listItems = this.state.items.map(function(item){ 
 
     return <li> {item} <button onClick={this.handleRemove}>X</button></li>; 
 
    }); 
 
    return(
 
     <div> 
 
     Child Container 
 
     <ul>{listItems}</ul> 
 
     </div> 
 
    ); 
 
    } 
 
});

結局私がarrayから、クリックされた対応する項目を削除するには、ボタンを取得できるようにしたいです。

ご迷惑をおかけして申し訳ありません。

おかげで、.map内部の機能をコンポーネントにバインドされていないので、起こって 萌え

答えて

1

あなたは他の答えのようにマップメソッドにコンテキストを渡す必要があるか、あなたの代わりに通常の機能の矢印機能を使用することができます。矢印関数はhandleRemoveメソッドを持つコンテキストを保持します。コードを次のように変換した場合:

var listItems = this.state.items.map((item,index) => { 
     return <li key={index}> {item} <button onClick={this.handleRemove}>X</button></li>; 
    }); 

期待どおりに動作します。これは、通常の機能と比較してarrow functionsの "this"のバインドについてもっと読むのに役立ちます

+0

ありがとうヒープ。この回答は最高でした。クリックされた配列の値/キーを取得する方法については、関数に渡されるので、handleRemove関数の配列値をconsole.logに渡すことができます。私はどこでも私は考えることができました、私はどちらもGoogleにはわからない。私は彼らから、コンポーネントの状態を読んで更新できると思います。 –

+1

handleRemoveをhandleRemoveとして定義できます。 function(value){ console.log(value); } 現在のアイテムを取得するには、 onClick = {this.handleRemove.bind(this、item)} にあなたのonClickを変換してください。あなたがCreateClassの代わりにes6クラスを使用していない場合は、次のようにしてください: onClick = {this.handleRemove(item)} – erdysson

+0

これは、onClick {=()=> this.handleRemove(item)}を使用して終了します。ありがとう。 –

1

コンテキストを第2引数として渡してコンポーネントにバインドすることができます。

var listItems = this.state.items.map(function(item,index){ 
     return <li key={index}> {item} <button onClick={this.handleRemove}>X</button></li>; 
    },this); 

また、配列内の各子にキーを提供することを忘れないでください。

full working example

関連する問題