【发布时间】:2021-08-10 23:09:10
【问题描述】:
我一般来说是 RxJs 的新手,但我正在调查一些 React 代码中的错误,在该错误中,在不相关的操作时,似乎会发出旧事件并将其呈现为显示错误。想一想,如果您有两个按钮在屏幕某处生成两条消息,并且单击一个按钮会显示另一个按钮的消息。
作为 RxJs 的新手,我不确定问题出在哪里。我在代码中没有看到一个ReplaySubject,只有Obserables、Subjects 和BehaviourSubjects。所以这要么是滥用 RxJs 功能,要么只是某个地方的一些错误逻辑。
无论如何,我找到了带有相关 Observable 的代码,但我不太确定这个人在这里试图完成什么。我已经阅读了combineLatest、map 和pipe,但这对我来说似乎是毫无意义的代码。它也可能以某种方式重新发布旧事件吗?我在任何地方都看不到动态订阅,尤其是在这种情况下。
Tldr 我不明白这段代码的意图。
export interface IFeedback {
id: number
text: string
}
export interface IFeedbackMessages {
message: IFeedback | undefined
}
feedback$ = new BehaviorSubject<IFeedback | undefined>(undefined)
feedbackNotifs$: Observable<IFeedbackMessages> = combineLatest([
feedback$
]).pipe(
map(([feedback]) => ({
feedback
})
))
我还发现这可能是个问题。在显示此消息的 React 组件中,我是不是错了,但是每次这个东西呈现它订阅然后取消订阅上面的主题时,它看起来像吗?
const FeedbackDisplay: React.FC () => {
const [feedbackNotifications, setFeedbackNotifications] = React.useState<IFeedbackMessages>()
React.useEffect(() =>
{
const sub = notification$.subscribe(setFeedbackNotifications)
return () => sub?.unsubscribe()
}, [notifications$])
}
【问题讨论】:
标签: reactjs typescript rxjs