JavaScript、LWC、搜索用户停止输入、去抖动

JavaScript, LWC, Searching after User to stop typing, debounce

在输入中,用户输入用于搜索产品的搜索短语。我想在用户停止输入后设置搜索。 Here 是一个很好的示例,但不适用于 Lightning Web 组件。 当我开始写入搜索输入时,有一个 error:“此页面有错误。您可能只需要刷新它。”

productList.html:

<lightning-input
  type="search"
  class="slds-var-m-bottom_small"
  value={searchKey}
  placeholder="Searching..."
  onchange={handleSearchEvent}>
</lightning-input>

productList.js:

import { LightningElement, wire } from 'lwc';
import findProducts from '@salesforce/apex/ProductMaster.findProducts';

export default class ProductList extends LightningElement {
  searchKey = '';
  timeout = null;

  @wire(findProducts, { searchKey: '$searchKey' })
  products;

  handleSearchEvent(event) {
    const eventValue = event.target.value;
    clearTimeout(timeout);
    timeout = setTimeout(function (eventValue) {
      this.searchKey = eventValue;
      console.clear();
      console.log('handleSearchEvent() -> this.searchKey: ' + this.searchKey);
    }, 1000); // searching after 1s
  }
}

如何设置超时? 并且 js 控制台写道:

console.log('handleSearchEvent() -> this.searchKey: ' + this.searchKey);

handleSearchEvent() -> this.searchKey: undefined

问题是您的函数中的 this 绑定需要显式设置:

timeout = setTimeout(function (eventValue) {
      this.searchKey = eventValue;
      console.clear();
      console.log('handleSearchEvent() -> this.searchKey: ' + this.searchKey);
    }.bind(this), 1000);

但也许更简单的方法是使用一个箭头函数,它会隐式绑定 this 我相信:

timeout = setTimeout((eventValue) => {
      this.searchKey = eventValue;
      console.clear();
      console.log('handleSearchEvent() -> this.searchKey: ' + this.searchKey);
    }, 1000);