reactjs - 在 RxJS 或 Redux Observable 中 debounceTime 也起到延迟的作用
问题描述
在用户单击时,我希望徽章显示 3 秒(即徽章应在 3 秒后自动隐藏)。我也只想要一个 SHOW_BADGE 操作来注册,直到徽章隐藏。我认为 debounceTime 对此有好处,但是,当我多次单击时,直到隐藏的时间变得不一致。
debounceTime 会延长延迟吗?debounceTime 本身是延迟吗?我将如何修复下面的示例以获得我想要的?
export const badgeEpic = action$ =>
action$.ofType('SHOW_BADGE')
.pipe(
debounceTime(3000),
delay(3000),
mapTo({ type: 'HIDE_BADGE' })
);
正如下面评论中的某人所建议的,auditTime 解决了这个特定问题。这是徽章史诗的最终代码。
export const badgeEpic = action$ =>
action$.pipe(
ofType('SHOW_BADGE'),
auditTime(3000),
mapTo({ type: 'HIDE_BADGE' })
);
解决方案
如果这就是您要做的事情,那么您可以在每次SHOW_BADGE
延迟超时之前执行此操作,之前的史诗会自行取消。这种方式HIDE_BADGE
总是会在最后一次点击后 3 秒被调用:
export const badgeEpic = action$ =>
actions$.pipe(
ofType('SHOW_BADGE'),
switchMap(() =>
of(({ type: 'HIDE_BADGE' })).pipe(
delay(3000),
takeUntil(action$.ofType('SHOW_BADGE')),
)),
)
正如@Yoshi 所指出的,takeUntil
可能没有必要switchMap
取消之前运行的内部可观察对象。
推荐阅读
- tableau-api - Tableau 按类别排名
- selenium - Selenium 在运行时在 ITestListener 上失败
- tfs - TFS 2018 升级错误问题=icon_traffic_cone
- collections - 计算 Landsat 集合的 NDVI
- azure - 创建可由任何人发起的自定义 SQL Azure 警报
- python-3.x - 可能的迭代问题?
- ios - 音频套件 xcode10
- ibm-cloud-private - IBM Cloud Private 上的 Cloud Automation Manager 内部服务错误
- php - 正确顺序的PHP图像上传
- css - CSS动画svg形状不居中