需求:用户无需回车或者点击搜索按钮,而是在输入内容同时展示搜索结果
思路:给搜索栏添加onChange,当用户改变内容时发送请求获取搜索结果。
问题:用户输入内容是密集型操作,如果不加处理,用户键入一段较长内容会向后端短时发送大量请求,造成服务器负载增大。
解决:在前端设置时效,时效内用户没有新操作才发送请求,代码如下:
<a-input-search v-model:value="searchString" @input="_autoSearch" />
export default class Main extends Vue {
timer = null;
searchString = '';
private _autoSearch() {
clearTimeout(this.timer);
this.timer = setTimeout(() => {
this._sendSearchRequest()
}, 300);
}
private _sendSearchRequest() {
// 发送搜索请求
}
}
用户每次修改input内容都会调用_autoSearch方法,每次调用都会重新生成计时器timer,只有在设置时间(例子内为300ms)期间没有进行操作,timer计时器才会调用发送搜索请求的方法。