审核模块workspace

一.问题分析


idps项目中需要新加字段,这个字段默认值为true,但是idps是通过rxjs这个技术进行管理的,如果不了解RxJS的数据管理手段就会很难修改,并且去修改的时候一定不要直接去修改类的实例化,项目中的workspace使用的是单例模式,仅仅new一次,仅仅会根据id的不同重新进行实例化,接口的重新出发使用其中自定义的方法进行重新调用。

二.代码实现


js 复制代码
export class Workspace {
  readonly filterStatus$ = new BehaviorSubject<boolean>(true);
  // 设置订阅状态的方法
  setFilterStatus(status: boolean) {
    this.filterStatus$.next(status);
    this.refreshData();
  }
  // 通过get方法获取这个observerble的值
  get filterStatus() {
    return this.filterStatus$.value;
  }
// 构造方法
  constructor(id: string) {
    
  }

  // 审核:这次需要新加字段的接口
  getReviewItems() {
    from(reviewService.getReviewItems(reviewDocIds, this.filterStatus))
      .pipe(takeUntil(this.destroy$))
      .subscribe(({ items, canApprove }) => {
        this.canApprove$.next(canApprove);
        this.reviewCardItems$.next(items);
      });
  }

  getReviewResolvedNum() {
    reviewService.getResolvedNum(this.id, this.filterStatus).then((res: ISafeAny) => {
      this.reviewResolvedNum$.next(res);
    });
  }
}
js 复制代码
const getStatusFilter = (status: boolean) => {
    // getButtonStatus(status);
    setButtonStatus(!buttonStatus);
    workspace.setFilterStatus(status);
  };

三.此次问题解决数据导向图


四.使用RxJS实现组件间的传值


  1. 在需要传递数据的组件中,创建一个SubjectBehaviorSubject对象,并将其作为状态管理。
js 复制代码
import React, { useState, useEffect } from 'react';
import { Subject } from 'rxjs';

const dataSubject = new Subject();

const SenderComponent = () => {
  const [data, setData] = useState('');

  const sendData = () => {
    dataSubject.next(data);
  };

  return (
    <div>
      <input
        type="text"
        value={data}
        onChange={(e) => setData(e.target.value)}
      />
      <button onClick={sendData}>Send</button>
    </div>
  );
};

export default SenderComponent;

在上述示例中,我们创建了一个dataSubject作为数据源,并在sendData函数中调用dataSubject.next()来发送数据。

  1. 在接收数据的组件中,使用useEffect钩子来订阅数据源的变化,并在组件卸载时取消订阅。
javascript 复制代码
import React, { useState, useEffect } from 'react';
import { Subscription } from 'rxjs';

const ReceiverComponent = () => {
  const [receivedData, setReceivedData] = useState('');
  let subscription;

  useEffect(() => {
    subscription = dataSubject.subscribe((data) => {
      setReceivedData(data);
    });

    return () => {
      subscription.unsubscribe();
    };
  }, []);

  return <div>Received Data: {receivedData}</div>;
};

export default ReceiverComponent;

五.对应需要补充的知识


  • TypeScript面向对象
  • RxJS相关内容
相关推荐
m0_639817154 分钟前
基于springboot纺织品企业财务管理系统【带源码和文档】
java·服务器·前端
石小石Orz6 分钟前
qinkun的缓存机制也有弊端,建议官方个参数控制
前端
用户40993225021215 分钟前
Vue浅响应式如何解决深层响应式的性能问题?适用场景有哪些?
前端·ai编程·trae
CC码码17 分钟前
重生之我在浏览器里“蹦迪”
前端·javascript·three.js
阡陌昏晨18 分钟前
H5性能优化-打开效率提升了62%
前端·javascript·vue.js
鹏北海18 分钟前
TypeScript 类型工具与 NestJS Mapped Types
前端·后端·typescript
烟袅19 分钟前
一文搞懂 CSS 定位:relative、absolute、fixed、sticky
前端·css
孟祥_成都19 分钟前
你离前端动画高手只差这个秘籍!GSAP ScrollTrigger 动画完全指南!(第一章)
前端·动效
小小前端_我自坚强20 分钟前
React 18 新特性深度解析
前端·javascript·react.js
BBB努力学习程序设计20 分钟前
Canvas绘图基础:坐标、线条与圆形的艺术
前端·html