javascript - 如何在反应中使用useDebounce进行搜索功能
问题描述
当用户在搜索功能中搜索用户时,我正在尝试使用 useDebounce。在这种情况下如何添加 useDebounce?
import { useDebounce } from "use-debounce";
const [searchQuery, setSearchQuery] = useState("");
const [invitees, setInvitees] = useState([]);
const handleChange = (event) => {
event.preventDefault();
setSearchQuery(event.target.value);
};
const getUserToInvite = async () => {
const res = await axios.get(
`/api/v1/search/users/invite/${searchQuery}/${teamId}`
);
setInvitees(res.data[0]);
setShowInvitees(!showInvitees);
};
useEffect(() => {
if (searchQuery === "") {
setInvitees([]);
}
if ((searchQuery || "").length >= 2) {
getUserToInvite();
}
}, [searchQuery]);
<input
className="invitees--search_input"
type="text"
name="name"
onChange={handleChange}
placeholder="Name"
aria-label="Search bar"
pattern="^[a-zA-Z0-9 ]+"
required
/>
你如何在 React.js 中执行去抖动?
解决方案
我认为你可以通过简单地去抖动值来处理这个问题。所以像
const [searchQuery, setSearchQuery] = useState("");
const debouncedSearchQuery = useDebounce(searchQuery, 500)
useEffect(() => {
if (debouncedSearchQuery === "") {
setInvitees([]);
}
if ((debouncedSearchQuery || "").length >= 2) {
getUserToInvite();
}
}, [debouncedSearchQuery]);
如果您希望消除回调,那就有点不同了。但是use-debounce
文档很好地解释了它!
https://github.com/xnimorz/use-debounce#debounced-callbacks
推荐阅读
- ruby - 如何将数组转换为字符串数组?
- css - Sass @use 与 @import 包大小
- mysql - Qt,MySQL:QMYSQLResult::data:第 1 列超出范围,仅有时会发生
- c# - 如何添加 OpenTelemetry StartActivity 来记录每个方法调用而不到处写?
- javascript - android 上的 Chrome 每次返回 229 获取 keyCode
- ubuntu - 如何通过 Devilspie2 设置无边界?
- sql - 仅显示选定特定行的度量(值)
- javascript - firebase.firestore.FieldValue.serverTimestamp() as int
- bash - 在 Bash 中,cd ./someDir 和 cd someDir 之间有什么实际区别吗?
- python - matplotlib 回调函数在 Visual Studio Code 中不起作用