2015-12-14 34 views
12

Bu haftasonu bazı tepkisel reposları yağmalarken, bileşen kompozisyonu için böyle bir şeye benzeyen ES6 sınıfı sözdizimini kullanarak bir örnekle karşılaştım.Gizemli sözdizimi 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> 
     } 
    } 

haber, çılgın bir insan gibi hissediyorum this.submit.bind(this)

çalıştığını ve bu özelliği her yerde belgelerine bulamıyorum yerine ::this.submit adlandırılan bu onClick={::this.doSomethingInsideRenderWithoutDotBind} sözdizimi nedir ve ben daha nerede okuyabilirim hakkında?

+12

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

+1

@Quentin işte bu! Sen harikasın, çok teşekkürler. Bunu cevap olarak kabul ediyorum, boş zamanlarınızda. – James

+2

Bunun bir evre 0 özelliği olduğunu unutmayın; bu, standartlaştırılmanın uzun bir yoludur. Hakkında bilmek ilginç, ama kendi kodunuzda kaçınılmalıdır. –

cevap

2

Çift kolon here ayrıntılı ve şu anda bir ES7 önerisi, bu yüzden henüz taş olarak ayarlanmadı ve hala üzerinde bir çok tartışma var. Ayrıca parametrelerin geçirilmesine de izin vermez. Bu ihtiyaç varsa, sınırlı kullanım var.

lexically bu bağlanır 'şişman ok' fonksiyonu (fiili işlevine kullanılan ve buna arama) seçeneği de vardır

...

// 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 }