2017-02-13 15 views
1

コールバック内で、コンポーネントに渡された小道具を取得したいと思いますが、this.propsを取得できません。thisはそこに定義されていません。ここでReactJSアクセス "this"コールバック

は簡単な例です:

var MyComponent = React.createClass({ 
    options:{ 
    componentFunction: function(c) { 
     console.log(this.props.myProp); //this references to the options here, not the component itself 
    } 
    }, 
    render: function() { 
    return (
     <OtherComponent options={ this.options } /> 
    ); 
    } 
}); 

そして、私は小道具をこのように渡します

<MyComponent myProp={"x"}; 

は、 おかげで任意のヘルプをお願い申し上げます。

+0

私はES6の構文に移行することを強くお勧めします。矢印の機能では問題ありません。 –

+0

アドバイスありがとう、私の次のプロジェクトのためにやってくれるでしょう! – Surreal

答えて

2

問題はcomponentFunctionに独自の有効範囲があることです。あなたはMyComponentに次のメソッドを追加することによって行うことができ、それをバインドする必要があります。

componentWillMount: function() { 
    this.options.componentFunction = this.options.componentFunction.bind(this); 
} 

しかし、自分自身のスコープを定義しない、代わりに矢印の関数を使用するよりよいかもしれなどからthisを継承します親スコープ

options:{ 
    componentFunction:() => console.log(this.props.myProp) 
} 
+0

多くありがとう@ジェームズ、これは私の問題を修正しました。更新されたfiddle:https://jsfiddle.net/gdc2bpw7/ – Surreal

2

this.optionsの代わりにthis.options.bind(this)を使用して、機能内のthisにアクセスしてください。

または、ES6の構文 - options =() = {...}を使用してください。

+0

お返事ありがとうございます。それは理にかなっていますが、このコードを追加しようとすると、次のエラーメッセージが表示されます。** this.options.bindは関数ではありません**。私はすぐにこれのためのフィドルを作成しました:https://jsfiddle.net/ayp52sck/ – Surreal

+0

ええ、ごめんなさい - @ジェームス・ビアリーの答えを見てみましょう - あなたはオブジェクトにではなく、関数にバインドaccordinalyを使用する必要があります –

関連する問題