自定义页面延迟触发(防抖 Debounce)
本案例来自三方开发者「Peng」
1. 使用场景
本例介绍一下在宜搭自定义页面中如何实现延迟触发。
input 输入数据时请求服务器等,防止触发限流。
文档来源:防抖 Debounce
2. 原理
在事件被触发n秒后,再去执行回调函数。如果n秒内该事件被重新触发,则重新计时。结果就是将频繁触发的事件合并为一次,且在最后执行。
例如:
电梯5秒后会关门开始运作,如果有人进来,等待5秒,5秒之内又有人进来,5秒等待重新计时...直至超过5秒,电梯才开始运作。
3. 实现功能
3.1 函数配置
(1)配置变量
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1677652377566-2d3b868b-74ca-4c93-b808-94118270ba85.png)
(2)配置防抖函数
if (this.state.debounceTimer) {
clearTimeout(this.state.debounceTimer);
};
const debounceTimer = setTimeout(() => {
// 需要防抖处理的业务逻辑从此往下写
// your code ...
this.setState({
debounceTimer: null,
});
}, 500);
this.setState({
debounceTimer,
});
3.3 使用示例
(1)创建自定义页面
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1677652524804-8eb0b866-7cc7-4411-9e43-0cf72495758c.png)
(2)无防抖示例
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1677652569814-cb4b2348-6da3-4dc7-af01-822fa101ad4f.png)
export function onChangeWithoutDebounce({ value }) {
const textareaField_l9qggl4g = this.$("textareaField_l9qggl4g");
textareaField_l9qggl4g.setValue(textareaField_l9qggl4g.getValue() + value + '\n');
}
(3)有防抖示例
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1677652605935-dcec4dc5-18bf-4957-9ddf-87fb7e302e01.png)
export function onChangeWithDebounce({ value }) {
if (this.state.debounceTimer) {
clearTimeout(this.state.debounceTimer);
};
const debounceTimer = setTimeout(() => {
// 需要防抖处理的业务逻辑从此往下写
// your code ...
const textareaField_l9qggl4i = this.$("textareaField_l9qggl4i");
textareaField_l9qggl4i.setValue(textareaField_l9qggl4i.getValue() + value + '\n');
this.setState({
debounceTimer: null,
});
}, 500);
this.setState({
debounceTimer,
});
}
4. 实现效果
4.1 无防抖
可见无防抖长按输入了多次。
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1677652808754-fa504251-30c4-4137-b9c5-fff69d36ef99.png)
4.2 有防抖
可见有防抖长按只输入了一次。
![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1677652862342-b00961cf-a280-4aa2-aca1-10e1330b1c56.png)
5. 防抖应用案例在线试玩
6. 在线试玩
本文档对您是否有帮助?