2016-12-20 4 views
0

私はReact.jsを初めて使用しており、次の2つの関数displayGendertoggleGenderがどのようにしてthis.propsにアクセスするのかがわかりません。React Component関数からthis.propsにアクセスする

import React, { Component } from 'react'; 


export default class User extends Component { 

    displayGender() { 
     console.log('displayGender: ', this.props) 
    } 

    toggleGender() { 
     console.log('toggleGender: ', this.props) 
    } 

    render() { 
     return (
      <Button onClick={ this.toggleGender.bind(this) } > 
       { this.displayGender.bind(this) } 
      </Button> 
     ); 
    } 
} 

なぜthis.toggleGender.bind(this)は、コンポーネントUserに反応これに渡されたthis.propsにアクセスすることが可能であるが、this.displayGender.bind(this)undefinedとしてthis.propsを見ていますか?

これまでのところ、this.propsthis.displayGenderからアクセスすることができます。これは通常の練習ですか?

export default class User extends Component { 

    displayGender(props) { 
     console.log(props.user) 
    } 

    render() { 
     return (
      <Button onClick={ this.toggleGender.bind(this) } > 
       { this.displayGender(this.props) } 
      </Button> 
     ); 
    } 
} 
+2

*関数*を子としてReactコンポーネントに渡すのはむしろ奇妙です。関数を呼び出すことを意味するのでしょうか(そして将来、戻り値を子として渡します)? * "これは通常の習慣ですか?" *関数を直接呼び出すと( '{this.displayGender()}')、 'this.props'にアクセスすることは問題ありません。 –

+0

@FelixKling子として関数を渡す方法を説明できますか?ごめんなさい。 – Nyxynyx

+1

'.bind'は関数を返します。したがって、 '{this.displayGender.bind(this)}'は子としての関数を '

答えて

0
あなた this.toggleGender.bind(this)機能は、あなたのコンポーネントで clickイベントとして追加され、 this.displayGender.bind(this)は通常言及何バインド <button>

内部の子ノードとして追加されるためですput the given function inside some other anonymous enclosed function (and preserve the context ie, this if supplied)

そうです

toggleGender.bind(this)通常function(){toggleGender()}

上記をclick機能に置くと、 click eventに関数を追加しているので意味があります。なぜthis.toggleGender.bind(これは) このリアクトコンポーネントユーザーが、this.displayGenderに渡されたthis.propsにアクセスすることが可能であるが、それは子ノードとして

+0

* "' toggleGender.bind(this) 'は通常' function(){toggleGender()} '"を指します*これはちょっと混乱していると思います。 '.bind'は新しい関数を返しますが、' this'が特定の値に束縛されていることが重要です。むしろ 'toggleGender.bind(foo)'は 'function(){toggleGender.call(foo)}'を指します。 –

+0

あなたのコメントのために@FelixKlingありがとうございます。私の編集を通過し、私の前提が正しいかどうか確認できますか? –

0

を、それを追加しても意味がありません.bind(this) はthis.propsを未定義と見なしますか?

私は、toggleGenderとは異なり、デフォルトで正しいオブジェクトに既にバインドされている必要があるため、「this」をdisplayGenderにバインドする必要はないとは確信していません。このメソッドを呼び出すだけで、displayGenderからthis.propsにアクセスできるはずです。

リアクト・ドックのHandling Eventsセクションが参考になる場合があります。

関連する問題