我正在尝试throttle
从lodash
功能组件中使用该方法,例如:
const App = () => {
const [value, setValue] = useState(0)
useEffect(throttle(() => console.log(value), 1000), [value])
return (
<button onClick={() => setValue(value + 1)}>{value}</button>
)
}
由于内部方法useEffect
在每次渲染时都重新声明,因此限制效果不起作用。
有没有人有一个简单的解决方案?
经过一段时间后,我相信setTimeout/clearTimeout
使用功能性助手(并将其移动到单独的自定义挂钩中)比使用功能性助手要容易得多。在稍后处理一个挑战之后,我们立即将其应用到useCallback
由于依赖关系更改而可以重新创建的挑战中,但是我们不想重置延迟运行。
下面的原始答案
您可能(可能需要)useRef
在渲染之间存储值。就像对计时器的建议一样
像这样
const App = () => {
const [value, setValue] = useState(0)
const throttled = useRef(throttle((newValue) => console.log(newValue), 1000))
useEffect(() => throttled.current(value), [value])
return (
<button onClick={() => setValue(value + 1)}>{value}</button>
)
}
至于useCallback
:
它可能也可以工作
const throttled = useCallback(throttle(newValue => console.log(newValue), 1000), []);
但是,如果我们尝试重新创建回调,则一旦value
更改:
const throttled = useCallback(throttle(() => console.log(value), 1000), [value]);
我们可能会发现它不会延迟执行:value
更改后,回调将立即重新创建并执行。
因此,我发现useCallback
在延迟运行的情况下不会提供明显的优势。由你决定。
[UPD]最初是
const throttled = useRef(throttle(() => console.log(value), 1000))
useEffect(throttled.current, [value])
但是这种方式throttled.current
已经value
通过闭包绑定到初始(0)。因此,即使在下一个渲染中也从未改变过。
因此,useRef
由于闭包功能,在将函数推入时要小心。
我已经花了几天时间,但找不到在RxJS中实现“独特节流”的方法。 假设每个事件以4个破折号完成,一个“不同的油门”将执行如下操作: -①-②-①---------①-----|- [明显的油门] -①-②-------------①-----|- 如何使用现有的RxJS操作符构建“独特的节流阀”?
我有一个带有函数的简单点击事件,我尝试使用进行节流。在中,每次单击我的,油门似乎都不起作用,但当我使用debounce时,它就起作用了。 问题是每次点击和同时增加,但按预期工作,它等待和更新。 工作现场演示
问题内容: 我有一个maxmemory_human 6.05 G和used_memory_human的Redis集群:4.62M 我想用转储数据来补充这个used_memory_human,所以我将有2G的used_memory_human 我该怎么办? 问题答案: 填充 used_memory_human:1.81G 清洁 used_memory_human:574.41K
油画滤镜允许您将照片转换为具有经典油画视觉效果的图像。借助几个简单的滑块,您可以调整描边样式的数量、画笔比例、描边清洁度和其他参数。 将照片(上图)转换为经典油画(下图) 近距离观察图画 使用油画滤镜 选择“滤镜”>“风格化”>“油画”以使用该滤镜。您可以调整滤镜的以下设置: 画笔滑块 描边样式 调整描边样式,范围从涂抹效果 0 至平滑描边 10 描边清洁度 调整描边长度,范围从最短最起伏 0 至
问题内容: 因此,我在这里已经读到,在Vue.js中,可以使用或在选择器中创建适用于子组件内部元素的样式规则。但是,无论是在SCSS还是普通的旧CSS中,尝试以我的样式使用它均无效。而是将它们原样发送到浏览器,因此无效。例如: home.vue: 生成的CSS: 我想要的是: 我与之相关的webpack配置如下所示: 所以我的问题是,如何让该操作员工作? 我已经找到了这个答案,但我确实在这样做,而
在我的项目中,当我只需单击主页上的“加入房间”按钮时,它会将我指向特定的房间。以房间号为例;它发生在xPOgk21523aqPW上,它通过一个像localhost:3000/room/xPOgk21523aqPW这样的扩展来实现。当我进行重定向时,我所在组件的名称是Player。我想要的是,当我将Homapage.js重定向到Player.js时,能够使用Player.js中的代码“xPOgk21