对触发器可观察对象上的某些可观察对象执行操作 - RxJS

时间:2015-10-22 01:51:45

标签: javascript reactjs react-native rxjs frp

我仍在尝试使用RxJS和React Native来解决问题。我正在构建一个带有ID TextInput,密码TextInput和登录按钮的登录屏幕,它们都有一个通过jsx连接到它们的单独回调处理程序(因此我无法使用RxJS的'fromEvent'API创建一个observable)。 / p>

在componentWillMount中,我创建了一个id文本更改,密码文本更改和单击处理程序的主题。

//In id text change handler
this.idStream.onNext(newId);

//In password text change handler
this.passwordStream.onNext(newPassword);

//In click handler
this.buttonClickStream.onNext(null); //null since value is not important

我只想在按钮ID和密码不是空字符串且点击按钮时触发API请求。

在componentWillMount中我试过

var subscription = this.buttonClickStream
                       .combineLatest(this.idStream, this.passwordStream, function(click, id, password) {
    return {
         id: id,
         password: password
    };
})
.filter(credentials => {return credentials.id.length > 0 &&
                               credentials.password.length > 0;}
.subscribe(function(credentials) {
    console.log('fire API request with credentials');
});

然而问题是,因为我正在使用combineLatest,所以api不仅在按钮点击时被触发,而且每次我更改id或密码时(只要他们通过过滤器)。我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您可以使用Rx.withLatestFrom代替combineLatest。它仅在源observable触发时触发,并将您传递的observable的最后发射值作为参数。

比照。 http://rxmarbles.com/#withLatestFrom