【问题标题】:How to use useDebounce for search function in react如何在反应中使用useDebounce进行搜索功能
【发布时间】:2021-08-09 22:28:39
【问题描述】:

当用户在搜索功能中搜索用户时,我正在尝试使用 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 中执行去抖动?

【问题讨论】:

  • 我的猜测是您将 searchQuery 用于useDebounce 第一个参数并对结果值产生影响。去抖动并不能保证解析的顺序与请求的顺序相同,因此您的 UI 会得到 out of sync

标签: javascript reactjs react-hooks


【解决方案1】:

我认为你可以通过简单地去抖动值来处理这个问题。所以像

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

【讨论】:

  • 我将其更改为您的代码,但出现错误invitees.filter(...) is not a function
  • 我该如何解决这个问题?
  • 这让我相信invitees 不是一个数组......很难从代码示例中判断为什么/在哪里,但是有什么方法可以让res.data[0] 不返回数组?这是您的示例中唯一可以看到您将invitees 状态设置为空数组以外的其他位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多