【发布时间】:2021-09-30 02:38:48
【问题描述】:
我正在编写一个搜索组件,它使用反应查询来获取数据。
export default function useSearchResults({
query,
}: IUseGetSearchResultsProps): QueryObserverResult<IResponse<ISearchResult>> {
return useQuery(
[SEARCH_RESULT_QUERY_KEY, { query }],
(): Promise<IResponse<ISearchResult>> => getSearchResults({ query }),
{
enabled: false,
keepPreviousData: true,
}
);
}
然后我将其导入到我的组件中,并在用户输入搜索词时重新获取数据:
const [searchTerm, setSearchTerm] = React.useState<string>("");
const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>): void => {
e.preventDefault();
setSearchTerm(e.target.value);
};
const { data, refetch } = useSearchResults({ query: searchTerm });
React.useEffect(() => {
if (searchTerm.length > 0) {
refetch();
}
}, [searchTerm]);
当searchTerm 中没有任何内容时,要求不显示任何数据,即searchTerm 是一个空字符串。
但是,如果没有将搜索词传递给 API,API 会返回所有结果,并且我无法更改该行为。
有没有办法重置useQuery 挂钩以将data 作为空数组返回?
【问题讨论】:
-
如果用户从未输入过搜索词怎么办?它会显示没有结果还是显示所有结果?如果用户已经搜索并且搜索词为空,您是否只显示没有结果?
标签: javascript reactjs typescript react-hooks react-query