审核模块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相关内容
相关推荐
不务正业的前端学徒3 分钟前
手写简单的call bind apply
前端
jump_jump6 分钟前
Ripple:一个现代的响应式 UI 框架
前端·javascript·前端框架
用户9047066835714 分钟前
Nuxt css 如何写?
前端
夏天想15 分钟前
element-plus的输入数字组件el-input-number 显示了 加减按钮(+ -) 和 小三角箭头(上下箭头),怎么去掉+,-或者箭头
前端·javascript·vue.js
0思必得016 分钟前
[Web自动化] Selenium基础介绍
前端·python·selenium·自动化·web自动化
Filotimo_19 分钟前
前端.d.ts文件作用
前端
进击的野人19 分钟前
Vue 3 响应式数据解构:toRef 与 toRefs 的深度解析
前端·vue.js·前端框架
ohyeah20 分钟前
CSS 作用域隔离实战:React、Vue 与 Styled Components 的三种范式
前端
二哈喇子!36 分钟前
前端HTML、CSS、JS、VUE 汇总
开发语言·前端
小白路过36 分钟前
node-sass和sass兼容性使用
前端·rust·sass