2015-09-16 4 views
0

Я использую синтаксис класса ES6, React.js и Flux для моего проекта. Это кусок кода:Есть ли другой элегантный способ сделать привязку к функции?

export default class Splash extends React.Component { 

    constructor() { 
    super(); 
    this.state = Comm.reqSplash(); 
    } 

    componentDidMount(){ 
    this._appReadyBound = this._appReady.bind(this); 
    SplashStore.subscribe(this._appReadyBound); 
    } 

    //Trigger when app data is loaded, if splash is in non-intro mode then end splash 
    _appReady(){ 
    SplashStore.unsubscribe(this._appReadyBound); 
    //If intro mode, do nothing 
    if (this.state.mode !== "non-intro") return; 
    this.endSplash(); 
    } 
} 

Как вы можете видеть, в методе «componentDidMount», я должен создать связанную версию метода «_appReady».

Если я не свяжусь с «этим», метод «_appReady» будет вести себя неправильно. Если я не создаю связанную версию, метод отмены подписки, который является таким же, как «removeChangeListener», если вы более знакомы с ним, не будет выполнять свою работу, а это значит, что слушатель все еще находится в списке слушателей.

Так что мне интересно, есть ли элегантный способ сделать привязку или избежать привязки. Или, может быть, я должен отказаться от синтаксиса класса ES6?

+0

возможно дубликата [Могу ли я использовать ES6 жир стрелок в методах класса?] (Http://stackoverflow.com/a/31368520/1048572) или [React, "this", cloneElement и es6] (http://stackoverflow.com/q/31841949/1048572)? Дайте мне знать, помогли ли вам какие-либо из них. – Bergi

ответ

1

Вы пробовали

_appready =() => { 
    //function here 

} 

Надеется, что это помогает

+0

Что/где это должно быть? –

+0

предполагается заменить функцию appready, написанную es6 способом со стрелкой, которая должна предоставить внутреннюю область этой области. –

+1

Это не относится к ES6. Вы не можете поместить это внутри тела класса. –