1
全部:addChangeListener如何在Facebook React Todo示例中工作
我是React的新手。當我跟隨其TodoMVC example,有一個問題是混淆了我這麼多:
裏面TodoApp組件,使用TodoStore.addChangeListener它註冊的處理程序:
componentDidMount: function() {
TodoStore.addChangeListener(this._onChange);
},
_onChange: function() {
this.setState(getTodoState());
}
而讓CHANGE_EVENT在TodoStore.addChangeListener來觸發_onChange回調:
addChangeListener: function(callback) {
this.on(CHANGE_EVENT, callback);
},
什麼這裏讓我困惑的是:
如何「this.on」知道回調的背景下(我的意思是,它是如何記住「這個」從_onChange)
如果什麼有多個TodoApp註冊自己的_onChange,所以todoStore將保持所有回調列表?
感謝
謝謝,是的,「this._onChange.bind(this)」是我認爲它應該也是。但爲什麼沒有它的當前代碼工作太多,或者你的意思是代碼實際上不起作用?我想如果沒有明確的上下文綁定,那麼當調用this.on時,回調將以window作爲上下文來調用,對吧? – Kuan
反應過去有一個功能,默認情況下叫做[Autobind](https://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html ),與'React.createClass'一起工作,並在每個函數上調用'bind'。該代碼可以使用該功能。 – Tyrsius
謝謝。這是驚人的,所以這意味着即使我們定義了_onChange:function()this.setState(getTodoState()); } 像這樣,但實際上this._onChange類似於function(){this.setState(getTodoState()); } .bind(this)? – Kuan