如果你熟悉了函数式编程,请把RxJS理解为异步化的Underscore.js

RxJS是一个解决异步问题的JS开发库.它起源于 Reactive Extensions 项目,它带来了观察者模式和函数式编程的相结合的最佳实践。 观察者模式是一个被实践证明的模式,基于生产者(事件的创建者)和消费者(事件的监听者)的逻辑分离关系.

况且函数式编程方式的引入,如说明性编程,不可变数据结构,链式方法调用会使你极大的简化代码量。(和回调代码方式说再见吧)。

RxJS兼具函数式和响应式两种编程方式的特点,RxJS擅长处理异步操作,因为它对数据采用“推”的处理方式,当一个数据产生的时候,被推送给对应的处理函数,这个处理函数不用关心数据是同步产生的还是异步产生的,这样就把开发者从命令式异步处理的枷锁中解放了出来。

流的概念

观察者模式

手动订阅,手动管理声明周期,还要通过 React 中的 state 搭建一个与 render 函数 (UI) 之间的桥梁。

  1. import React from 'react';
  2. import { interval } from 'rxjs';
  3. import { tap } from 'rxjs/operators';
  4. class Timer extends React.Component {
  5. state = {
  6. val: 0,
  7. };
  8. subscription = new Subscription();
  9. componentDidMount() {
  10. const sub = interval(1000).pipe(
  11. tap((val) => this.setState({ val }))
  12. )
  13. // 添加订阅
  14. this.subscription.add(sub)
  15. }
  16. componentWillUnmount() {
  17. // 删除订阅
  18. this.subscription.unsubscribe()
  19. }
  20. render() {
  21. return <h1>{this.state.val}</h1>
  22. }
  23. }

Leetcode方案 rxjs + rxjs-hooks

  1. import React from 'react';
  2. import { interval } from 'rxjs';
  3. import { useObservable } from 'rxjs-hooks';
  4. function Timer() {
  5. const val = useObservable(() => interval(1000), 0);
  6. return <h1>{val}</h1>
  7. }

https://github.com/LeetCode-OpenSource/rxjs-hooks

参考

https://reactjs.org/docs/hooks-intro.html
https://jerryzou.com/posts/rxjs-hooks/
https://github.com/LeetCode-OpenSource/rxjs-hooks