审核模块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相关内容
相关推荐
爱勇宝11 小时前
鸿蒙生态的下半场:开发者不只要能开发,还要能赚钱
android·前端·程序员
IT_陈寒14 小时前
SpringBoot这个自动配置坑我跳了三次
前端·人工智能·后端
kyriewen14 小时前
我用 AI 一周写完了整个项目,上线第一天就崩了——这是我踩过最贵的 5 个坑
前端·javascript·ai编程
牧艺15 小时前
从零到协同:构建类飞书在线文档系统的五个技术重难点
前端·人工智能
红尘散仙15 小时前
想写一个像样的终端 App?试试把 React 的开发体验搬进 Rust TUI
前端·rust
袋鼠云数栈UED团队16 小时前
一套 Spec-First 的 AI 编程工作流
前端·人工智能
袋鼠云数栈前端16 小时前
一套 Spec-First 的 AI 编程工作流
前端·ai+
angerdream16 小时前
Android手把手编写儿童手机远程监控App之vue3 路由守卫
前端
不服老的小黑哥16 小时前
AI规范驱动编程-harness工程项目实战
前端
vivo互联网技术16 小时前
从 Web 到桌面:基于 Tauri 2.0 + Vue 3 打造 vivo 线下门店「大头贴」拍照体验系统
前端·rust