【发布时间】:2019-04-08 12:23:10
【问题描述】:
我正在寻找的东西非常简单,但我已经坚持了一段时间:
我一直在使用 lodash 的 debounce 功能,以便在您键入功能时实现搜索。
基本上,当您在搜索栏中输入内容时,网站会在最后一次键盘输入后等待 500 毫秒,然后才会触发搜索。
问题是第一次调用没有去抖,因为去抖会等待第二次调用以引入延迟。
现在我已经使用选项{ trailing: true, leading: false } 对其进行了配置,但我不知道如何配置它以使第一个函数调用去抖动。
const DebouncedSearchBox = ({ currentRefinement, refine }) => {
const debouncedSearch = debounce(
e => {
refine(e.target.value);
if (!e.target.value.length) {
document.getElementsByClassName("ais-Pagination-list")
? Array.from(
document.getElementsByClassName("ais-Pagination-list")
).forEach(function(element) {
element.classList.add("hidden");
})
: null;
document.getElementsByClassName("ais-Stats-text")
? Array.from(
document.getElementsByClassName("ais-Stats-text")
).forEach(function(element) {
element.classList.add("hidden");
})
: null;
} else {
document.getElementsByClassName("ais-Pagination-list")
? Array.from(
document.getElementsByClassName("ais-Pagination-list")
).forEach(function(element) {
element.classList.remove("hidden");
})
: null;
document.getElementsByClassName("ais-Stats-text")
? Array.from(
document.getElementsByClassName("ais-Stats-text")
).forEach(function(element) {
element.classList.remove("hidden");
})
: null;
}
document.getElementsByClassName("search_results")
? Array.from(
document.getElementsByClassName("search_results")
).forEach(function(element) {
element.classList.remove("loading");
})
: null;
},
500,
{ trailing: true, leading: false }
);
const onChange = e => {
e.persist();
console.log("on change" + e.target.value);
document.getElementsByClassName("search_results")
? Array.from(
document.getElementsByClassName("search_results")
).forEach(function(element) {
element.classList.add("loading");
})
: null;
debouncedSearch(e);
};
return (
<input
defaultValue={currentRefinement}
onChange={onChange}
aria-label="recherche"
className="ais-SearchBox-input"
autoFocus
onFocus={e => {
let val = e.target.value;
e.target.value = "";
e.target.value = val;
}}
/>
);
};
【问题讨论】:
-
请发布您的代码。
-
@DerekBrown 当然
标签: javascript lodash