在我们日常开发中,经常会有搜索框过调用接口获取数据展示,除了做必要的防抖处理外,还有我们经常忽略的一个问题:用户在输入时,因为用户输入时的停顿就会调用了几次接口,但是输入完成后,这个接口可能由于网络波动等各种原因出现调用时长较长的情况,那么就会展示之前的接口数据,很显然用户输入完成后展示之前的数据肯定是不行的,我们需要去避免这种情况,想到了一种方法可以判断出是否是最后一次请求 (该方法需要后端配合)再去显示真正需要显示的数据,以免对用户造成困扰
直接上demo
<template>
<div class="demo-input">
<a-input type="text" @onchange="search" />
<p>{{responseData}}</p>
</div>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {
responseData: '',
key: 0, // 第几次请求
}
},
methods: {
search(val) {
this.key += 1; // 调用一次接口请求次数就+1
axios.get('/api/search', {
params: {
key: this.key,
title: val
}
}).then(res => {
if (this.isLastRequest(res.data.key)) {
this.responseData = res.data.content
}
})
},
// 判断是否是最后一次请求
isLastRequest (key) {
return key === this.key
}
}
}
</script>