1. 加载状态指示
在发送请求时,设置一个加载状态(例如 isLoading
),告诉用户正在加载数据。当收到数据后,再更新状态。
2. 取消上一个请求
在发送新的请求之前,可以取消之前的请求。使用像 Axios 的 CancelToken
可以帮助你做到这一点。
3. 保持数据一致性
在每次请求时,保存当前请求的页码,并在数据返回时检查这个页码。只有当返回的数据页码与当前请求的页码一致时,才更新视图。
fetchData(page) {
this.currentPage = page;
// 取消上一个请求
if (this.cancelTokenSource) {
this.cancelTokenSource.cancel("Operation canceled due to new request.");
}
this.isLoading = true;
// 创建一个新的取消令牌
this.cancelTokenSource = axios.CancelToken.source();
axios.get(`/api/data?page=${this.currentPage}`, {
cancelToken: this.cancelTokenSource.token,
})
.then(response => {
// 仅在请求的页面与当前页面一致时更新数据
if (response.data.page === this.currentPage) {
this.items = response.data.items;
}
})
.catch(error => {
if (axios.isCancel(error)) {
console.log("Request canceled:", error.message);
} else {
console.error("Error fetching data:", error);
}
})
.finally(() => {
this.isLoading = false;
});
},