如何在停止拖动输入范围时才调用该函数?
state={
range:500
}
changeHandle=(e)=>{
const range=e.currentTarget.value;
this.setState({range});
this.connectToServer(range); //call this function only when dragging is stopped
}
connectToServer=async(value)=>{
await axios.............
}
超文本标记语言
<input onChange={this.handleChange} value={this.state.range} type="range" step="500" min="500" max="10000" />
3条答案
按热度按时间jv2fixgn1#
您可能不想用所有无关的中间
onChange
值来敲击端点,因此基本上需要对输入的onChange
处理程序进行去抖动。下面是我偶尔使用的一个简单的去抖动实用程序:
但任何第三方的一揽子计划,如洛达什,都是可行的。
接下来的步骤很关键,您不希望阻止状态更新,因此希望将状态更新与服务器调用分开。
在
componentDidUpdate
生命周期方法中调用后端的副作用有两个原因。1.这是对付副作用的正确方法。
1.它可确保您具有最新的
this.state.range
值代码:
演示
完整演示代码:
qni6mghb2#
我假设您希望防止一次又一次地命中API,实际上还有另一种解决方案,即使用
debounce
函数。TLDR; debounce做的就是把函数调用延迟这个duration,我假设你用的是reactJS,那么可以这样用lodash实现
你可以在codesandbox上用here试试。这是文档
还有另一种使用去抖动的方法,通过创建自定义钩子
useDebounce
。如果你对此感兴趣,你可以检查它herebksxznpy3#
OnMouseUp对我很有效