2015-12-14 7 views
12

私は今週末にいくつかのリアクションレポジスを略奪していましたが、このようなことが少し起こったコンポーネント構成のES6クラス構文を使用した例を紹介しました。不思議な構文onClick = {:: this.submit}

class MyThing extends Component { 
     constructor(props) { 
     super(props) 
     this.state = {something: 'the thing'} 
     } 

     submit() { 
     // do stuff 
     } 

     render() { 
     <div> 
      <button onClick={::this.submit}>Fire Submit</button> 
     </div> 
     } 
    } 

予告それが動作this.submit.bind(this)

の代わりに::this.submit、と私はどこにもこの機能に関するドキュメントを見つけることができない、私は狂った人のように感じ、このonClick={::this.doSomethingInsideRenderWithoutDotBind}構文は何と呼ばれ、どこで詳細を読むことができますそれについて?

+12

https://github.com/zenparsing/es-function-bind – Quentin

+1

@Quentinそれです!あなたは素晴らしいです、ありがとう。私は答えとして、あなたのレジャーでそれを受け入れるだろう。 – James

+2

これはステージ0の機能であることに注意してください。これは標準化されていることから遠いことを意味します。興味深いことは知っているが、あなた自身のコードでは避けてください。 –

答えて

2

ダブルコロンはhereであり、現在はES7の提案ですので、まだ石に設定されておらず、まだまだ議論が多いです。また、パラメータを渡すこともできません。あなたがその必要性を持っているならば、それは限られた使用しかありません。

字句これに結合する「脂肪矢印」関数(実際の関数では使用していないことへの呼び出し)オプションもあり

...

// Basic syntax: 
(param1, param2, paramN) => { statements } 
(param1, param2, paramN) => expression 
    // equivalent to: => { return expression; } 

// Parentheses are optional when there's only one argument: 
(singleParam) => { statements } 
singleParam => { statements } 

// A function with no arguments requires parentheses: 
() => { statements } 

// Advanced: 
// Parenthesize the body to return an object literal expression: 
params => ({foo: bar}) 

// Rest parameters are supported 
(param1, param2, ...rest) => { statements }