2016-08-16 77 views
16

我有在這樣的反應應用中的一些JSX代碼:::(雙冒號)在JavaScript中表示什麼?

... 
_renderSignOutLink() { 
    if (!this.props.currentUser) { 
     return false; 
    } 

    return (
     <a href="#" onClick={::this._handleSignOutClick}><i className="fa fa-sign-out"/> Sign out</a> 
    ); 
... 

什麼是雙結腸,::,意味着調用函數之前?

+2

http://stackoverflow.com/questions/31220078/javascript-double-colon-es7-proposal – dmoo

+3

不是JSX的一部分,而是JS本身的一部分 –

+2

這是不是每次調用render時都會創建一個新的函數實例取決於你的狀態變化,可能會很多次)? –

回答

21

::a proposed binding operator該desugars成綁定函數:

::foo.bar 
// becomes 
foo.bar.bind(foo) 

在陣營(和任何其它的事件處理程序),因爲它意味着this將具有預期值(類的實例)這是有用的,當稍後調用事件處理程序。

+5

只是一些思考的食物。在我們的渲染方法中,對組件的函數調用使用bind並不被認爲是好的做法,因爲它可能會影響性能。這裏有一些替代方案https://daveceddia.com/avoid-bind-when-passing-props/ – Justin

相關問題