2015-12-11 102 views
2

我使用本機作出反應與RxJS和直到現在,每當我訂閱可觀察到的我一直在做:陣營與原住民RxJS

observable.subscribe(() => { 
    this.setState({ loading: true }); 
}.bind(this)); 

但自從我升級反應原住民0.16.0,我到處已經在使用ES2015箭頭符號聲明的內聯函數上執行了bind(this),React Native將它視爲錯誤。然而,當我改變箭頭符號回ES5如下規則函數符號:

observable.subscribe(function() => { 
    this.setState({ loading: true }); 
}.bind(this)); 

的錯誤似乎消失。

這是怎麼回事?

+1

什麼是你想綁定'this'?這似乎是你必須做的事情,只有當你*不*使用箭頭功能? – azium

+0

..我用@azium老化。如果你寫()=> {}那麼來自外部作用域的'this'已經綁定在函數中。 –

回答

5

當您使用箭頭功能時,您已經將此功能綁定到該特定功能。所以:

() => {} === function() {}.bind(this) 
+0

'()=> {return this}()=== function(){return this} .bind(this)()' –

0

關係到你的問題,我也建議檢查出FrintJS,附帶了反應,並作出反應的本地集成太:https://github.com/frintjs/frint-react-native

它附帶的observe高階組件,它可以讓你使用RxJS observable將流道具支持到您的組件,因此您的基本組件始終被寫爲無狀態函數。

例子:

import React from 'react'; 
import { Observable } from 'rxjs'; 
import { observe } from 'frint-react'; 

function MyComponent(props) { 
    return <p>Interval: {props.interval}</p>; 
} 

export default observe(function() { 
    // return an Observable emitting a props-compatible object here 
    return Observable.interval(1000) 
    .map(x => ({ interval: x })); 
})(MyComponent); 

更多關於這個話題:

相關問題