2016-08-16 2 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

Будет ли это создавать новый экземпляр функции каждый раз, когда рендер вызывается (который может быть много раз в зависимости от ваших государственных изменений?) –

ответ

21

:: является a proposed binding operator, что desugars в связанную функцию:

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

Это полезно в React (и любые другие обработчиков событий), потому что это означает, что this будет иметь ожидаемое значение (экземпляр класса), когда обработчик события позже вызывается.

+5

Просто немного еды для размышлений. Не считается хорошей практикой использовать bind для вызовов функций для компонентов в наших методах рендеринга, так как это может повлиять на производительность. Вот несколько альтернатив https://daveceddia.com/avoid-bind-when-passing-props/ – Justin

Смежные вопросы