一.问题分析
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实现组件间的传值
- 在需要传递数据的组件中,创建一个
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()
来发送数据。
- 在接收数据的组件中,使用
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
相关内容