reactjs - 如何在搜索期间取消较早的获取请求并保留最后一个
问题描述
const controller = new AbortController()
const signal = controller.signal
const Search = ({ searchSuggestion }) => {
const onkeychange = async (e) => {
controller.abort()
let string = e.target.value
const suggest = await getSearchSuggestion({
string,
signal,
})
}
return (
<input
type="text"
autoComplete="off"
placeholder="Search"
onChange={onkeychange}
/>
)
}
此取消请求代码。问题是,它取消了所有请求。虽然我只想取消早期击键的请求。并保持最后一个请求有效。
解决方案
您在所有请求中使用相同的控制器/信号,您可以像这样保存以前的控制器:
const Search = ({ searchSuggestion }) => {
const previousController = useRef();
const onkeychange = async (e) => {
if (previousController.current) {
previousController.current.abort();
}
let string = e.target.value
const controller = new AbortController()
const signal = controller.signal
previousController.current = controller;
const suggest = await getSearchSuggestion({
string,
signal,
})
}
return (
<input
type="text"
autoComplete="off"
placeholder="Search"
className="search"
onChange={onkeychange}
/>
)
}
推荐阅读
- amazon-web-services - 如何为 AWS EC2 现场请求设置暂停
- node.js - 如何将 opus 可读流转换为 node.js 中的 PCM 或 .wav 文件?
- php - 如何从数据库 WHERE naam 更新 int
- java - 如何在不使用方法通道的情况下仅使用颤振插件和飞镖而不是原生 android 和 ios
- spring-boot - Spring Boot 2.4.1 过早地从文档中消失了
- oracle - ORA-01841 错误:年份必须介于 -4713 和 +9999 之间,而不是 0
- javascript - CSS Bootstrap:当我从 ios 设备上传图片时,object-fit:cover; 不适用于 android 和 pc 设备
- node.js - npm 错误!错误号 ENOENT
- jmeter - 提取响应并使用While Controller等待Jmeter中的响应
- reactjs - 为什么单击按钮时我的状态没有在 redux 中更新