当前位置: 首页 > 知识库问答 >
问题:

RXJS-油门时间不是油门

楚知
2023-03-14

我有一个带有React函数component的简单点击事件,我尝试使用RxJSthrottleTime进行节流。在500ms中,每次单击我的throttle,油门似乎都不起作用,但当我使用debounce时,它就起作用了。

import React, { useState, useRef } from "react";
import { throttleTime, debounceTime } from "rxjs/operators";
import { Subject } from "rxjs";

const subject = new Subject();

function Button() {
  const btn = useRef();
  const [clickCount, updateClick] = useState(0);
  const [debounceCount, updateDebounced] = useState(0);
  const [throttleCount, updateThrottled] = useState(0);
  const onClicked = e => {
    updateClick(parseInt(e.target.value, 10) + 1);
    subject.next(parseInt(e.target.value, 10) + 1);
  };
  subject.pipe(debounceTime(500)).subscribe(d => updateDebounced(d));
  subject.pipe(throttleTime(400)).subscribe(d => updateThrottled(d));
  return (
    <div className="button">
      <button value={clickCount} ref={btn} onClick={onClicked}>
        CLICK
      </button>
      <div>Actual clicks: {clickCount}</div>
      <div>Debounced clicks: {debounceCount}</div>
      <div>Throttle click: {throttleCount}</div>
    </div>
  );
}

问题是每次点击clickCount限制计数同时增加,但DebounceCount按预期工作,它等待500ms和更新。

工作现场演示

共有1个答案

哈骞仕
2023-03-14

组件函数Button()在每次状态更改时都会被调用,因此每次状态更改时都会进行新的订阅。这就是为什么它看起来好像不起作用。

相反,订阅应该进入use效应()

useEffect(() => {
  subject.pipe(throttleTime(400)).subscribe(d => updateThrottled(d));
}, []);

另请参见如何仅调用一次带有React useEffect的加载函数。

 类似资料:
  • 我已经花了几天时间,但找不到在RxJS中实现“独特节流”的方法。 假设每个事件以4个破折号完成,一个“不同的油门”将执行如下操作: -①-②-①---------①-----|- [明显的油门] -①-②-------------①-----|- 如何使用现有的RxJS操作符构建“独特的节流阀”?

  • 在回答“亚马逊DynamoDB吞吐量是如何计算和限制的?”有人建议,只要超出每秒预配的吞吐量,DynamoDB就会限制请求。然而,这与我的经验相矛盾。 我在一个表中发布了多行,通常行数远远超过了配置的写容量。这种情况会在短时间内发生。在某一点上,我甚至有5分钟的平均时间超过了规定的容量。OTOH,平均15分钟低于容量。在那段时间里,我没有收到任何限制性的请求。 15分钟的平均峰值远低于规定的容量:

  • 我要求允许在单个从节点的单个Jenkins作业中进行并发构建。 因此,我启用了throttle concurrent build选项,并发布了我能够进行并发构建的帖子。但是,如果我给MaxNo of concurrent builds 7或大于7,那么它总是一次处理6个构建,第7个构建处于等待状态。 在这种情况下有没有限制?

  • 问题内容: 对不起,我进行了大量搜索,以查找这3个功能(绘画,重绘,paintComponent)之间如何相互作用,但我不知道。您能准确解释一下它们何时被调用(因为有时java会在没有我问他的情况下调用它),它们到底在做什么,它们之间有什么区别。谢谢 问题答案: 我不确定“ paint”,但是我可以解释repaint()和paintComponent()之间的关系。 根据我在Java方面的有限经验

  • 问题内容: 我正在尝试从功能组件中使用该方法,例如: 由于内部方法在每次渲染时都重新声明,因此限制效果不起作用。 有没有人有一个简单的解决方案? 问题答案: 经过一段时间后,我相信使用功能性助手(并将其移动到单独的自定义挂钩中)比使用功能性助手要容易得多。在稍后处理一个挑战之后,我们立即将其应用到由于依赖关系更改而可以重新创建的挑战中,但是我们不想重置延迟运行。 下面的原始答案 您可能(可能需要)

  • 本章介绍Canvas组件,用它来生成简单的二维(2D)图形,目标是创建一个PaintPot(油漆桶)应用,让用户在手机屏幕上绘制图画,并让用户用手机给自己拍照,然后在自己的照片上绘图。回顾历史,早在20世纪70年代,PaintPot是最早运行在个人电脑上的应用之一,目的是为了证明个人电脑的潜力。那时候,开发这样一款简单的绘图应用是一项极其复杂的工作,而且绘图效果也略显粗糙。但现在,使用App In