2016-11-22 21 views
1

ReactJSを使い始めたばかりで、マップ関数内でonClickイベントをどのように動作させることができないのか分かりません。 子要素でonClick = {this.someMethodName}を使用していないときは、すべて正常に動作しているため、 'this'キーワードが親を参照していないと推測しています。マップ関数内のReactJS onClickイベントを呼び出して親関数を呼び出す

var SupplierBarComponent = React.createClass({ 
doSomething: function() { 
    console.log("aaaaaaaah"); 
}, 

render: function() { 

    const suppliers = this.props.data.map(function(supplier){ 
     return (
      <option onClick={this.doSomething} key={supplier.id}>{supplier.name}</option> 
     ); 
    }, this); 

    return(
     <div>{suppliers}</div> 
    ); 

} 

どのように私はそれを動作させることができます:ここで

は、シンプルなメニューバーをレンダリング私のコード、ありますか? 私はいくつかの同様の質問*を読んだが、彼らの解決策は私のためには機能しなかった、または私はそれらを働かせることができなかった。

*: React onClick inside .map then change data in another sibling component "this" is undefined inside map function Reactjs Pass props to parent component in React.js

+0

あなたはマップ機能でこれをCONSOLE.LOG場合は、コンポーネントオブジェクトを返すのですか? – finalfreq

+0

はい、そうです。 console.log(this.doSomething)で呼び出すと、without()のように関数自体が表示されます。 3models.jsx:9(){ console.log( "aaaaaaaah"); } 私はかっこで呼び出すと、最初は 'undefined'を表示しますが、関数はまだ呼び出され、 'aaaah'が出力されます。 – handris

+0

'this.doSomething.bind(this)'をする必要がありますか?この内部のあなたの使用に応じて何か?また、より多くの情報を含む合成イベントオブジェクトを取得する必要があります。 – Tracker1

答えて

2

あなたのコードが動作しています。私はこのフィドルでそれを確認しました。私はちょうど小道具の代わりに配列をハードコードしました。

var Hello = React.createClass({ 
doSomething: function() { 
    console.log("aaaaaaaah"); 
}, 

render: function() { 
     var data=[{id:1,name:'name 1'},{id:2,name:'name 2'}] 
    const suppliers = data.map(function(supplier){ 
     return (
      <option onClick={this.doSomething} key={supplier.id}>{supplier.name}</option> 
     ); 
    }, this); 

    return(
     <div>{suppliers}</div> 
    ); 
} 
}) 

ReactDOM.render(
    <Hello />, 
    document.getElementById('container') 
); 

https://jsfiddle.net/evweLre5/

+0

それをチェックするための努力のおかげで、それは明らかにフィドルで動作します。では、ローカルマシンで何が間違っているのでしょうか?私はちょうどどこを見るべきか分からない。 – handris

+0

あなたの最初の提案は、反応コードにES6規約を使用することです。 –

+0

私も地元で試してみましたが、それはまったく問題なく動作します。 –

関連する問題