2015-12-11 208 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); 

更多关于这个话题:

相关问题