如何通过反应查询仅在第一次点击时获取数据,然后在后续点击时禁用重新获取

ske*_*law 3 javascript reactjs axios react-query

我在实现表单时遇到一个问题,其中select 中使用的数据(通过 React-query 从数据库检索)只能在单击 input 时检索一次,并且后续单击不应导致 refetch

如何以干净的方式做到这一点?

钩:

export const useUnitOfMeasureSelectData = ({
  queryPageIndex,
  queryPageSize,
  queryFilters,
  enabled,
  refetchOnWindowFocus,
}) => {
  return useQuery(
    ["unitofmeasure-list", queryPageIndex, queryPageSize, queryFilters],
    () => fetchItemData(queryPageIndex, queryPageSize, queryFilters),
    {
      keepPreviousData: true,
      staleTime: 60000,
      enabled,
      refetchOnWindowFocus,
      select: (data) => {
        const categories = data.data.results.map((obj) => ({
          value: obj.id,
          label: obj.name,
        }));
        return categories;
      },
    }
  );
};
Run Code Online (Sandbox Code Playgroud)

onClick={()=>refetch()}在每次点击时调用重新获取数据的组件中。

  const {
    data: unitOfMeasureSelectData = [],
    refetch: refetchUnitOfMeasureSelectData,
  } = useUnitOfMeasureSelectData({
    queryPageIndex: queryPageIndex,
    queryPageSize: queryPageSize,
    queryFilters: filterString,
    enabled: false,
    refetchOnWindowFocus: false,
  });
Run Code Online (Sandbox Code Playgroud)

TkD*_*odo 5

看起来你想要一个具有无限陈旧时间的惰性查询:

const [enabled, setEnabled] = useState(false)

useQuery(key, fn, { enabled, staleTime: Infinity })
Run Code Online (Sandbox Code Playgroud)

然后,当您单击输入时,您会调用setEnabled: true. 无限的陈旧时间确保查询始终被认为是新鲜的,因此不会再发生后台重新获取。