阅读 99

RxJS

最近在研究RxJS的编程思想,与OOP不同,RxJS更像是事件驱动+观察者模式,有所介绍。有经验的读者想必会有个疑问:Observable与Promise模式,或者说OOP到底区别在哪里,能带来什么不同呢?
我的理解是(此处为个人理解):Observable更好地实现了解耦。如同我们用消息队列在不同系统间传递信息一样,Observable在不同函数、模块间传递消息,并且消息的发布者(Producer)不需要知道消息的消费者(Consumer)是谁。

举个代码示例,以往用JQuery实现Click,我们通常会这么写(伪代码,看个意思)

$("#btnFoo").on("click", ()=>{
  fun01();
  fun02();
})

很明显这段代码是紧耦合的,消息的发布者btnFoo.click必须知道fun01、fun02的存在。利用RxJS则可以解决这个紧耦合的问题。
以下代码示例通过Subject(继承自Observable)实现消息的发布者与消费者的解耦。 执行:create-react-app [项目名称],打开app.js,贴入以下代码:

import { useEffect, useState, useRef } from ‘react‘;
import { fromEvent, interval, Subject } from ‘rxjs‘;
import { scan, debounce } from ‘rxjs/operators‘;

let seed = 0;
let subjectFoo = new Subject(seed);

function Producer() {
  useEffect(()=>{
    console.log(‘useEffect‘);
  }, []);

  onclick = (e) => {
    console.log(‘onclick‘);
    subjectFoo.next(seed++);
    e.stopPropagation();
  }
  return(
    
  )
}

function Consumer1() {
  const refData = useRef();

  useEffect(()=>{
    subjectFoo.subscribe(data=>{
      console.log(`Consumer1 receives: ${data}`);
      refData.current.innerHTML = data;
      //setFoo(data);
    });
  }, []);

  return(
    
Consumer1:
) } function Consumer2() { const refData2 = useRef(); useEffect(()=>{ subjectFoo.subscribe(data=>{ // console.log(`Consumer2 receives: ${data}`); refData2.current.innerHTML = data; //setFoo(data); }); }, []); return(
Consumer2:
) } function App() { return (
{ Producer() }
{ Consumer1() } { Consumer2() }
); } export default App;

上述代码有三个模块(函数),1个producer与2个consumer,producer并不知道consumer的存在,通讯完全依靠Subject完成。

原文:https://www.cnblogs.com/Andy1982/p/15269515.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐