审核模块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. 在需要传递数据的组件中,创建一个Subject或BehaviorSubject对象,并将其作为状态管理。
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相关内容
相关推荐
可乐鸡翅yeah_1 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx1 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师1 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow2 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路2 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他2 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou1323 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙3 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript
纸片人3 小时前
Blender 建模 + Three.js 展示:和 AI 一起做一个光储充超充站数字孪生大屏
前端
智能直播3 小时前
网络RTMP拉流不卡顿、声音不同步?一文讲透缓冲区、时间戳与MEDAI V2实战调优
前端