如何仅在第一次点击时通过 react-query 获取数据,然后在后续点击时禁用重新获取
How to fetch data only on first click via react-query and then disable refetch on subsequent clicks
我在实现 数据 中使用的表单时遇到问题,通过反应查询从数据库中检索, 应该只单击输入时检索一次,后续单击不应导致重新获取。
如何以干净的方式做到这一点?
挂钩:
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;
},
}
);
};
在组件调用中 onClick={()=>refetch()}
每次点击都重新获取数据。
const {
data: unitOfMeasureSelectData = [],
refetch: refetchUnitOfMeasureSelectData,
} = useUnitOfMeasureSelectData({
queryPageIndex: queryPageIndex,
queryPageSize: queryPageSize,
queryFilters: filterString,
enabled: false,
refetchOnWindowFocus: false,
});
react/native 中的按钮有一个 属性 disabled
,您可以在完成后将其设置为 false。可能的方法是使用 state
<button disabled={this.state.btnDisable}/>
然后你可以在第一次点击按钮时更新状态
//class component
this.setState({btnDisable: false})
//function component
setbtnDisable(false)
看起来您想要一个具有无限陈旧时间的惰性查询:
const [enabled, setEnabled] = useState(false)
useQuery(key, fn, { enabled, staleTime: Infinity })
然后,当你点击输入时,你调用setEnabled: true
。无限的陈旧时间确保查询始终被认为是新鲜的,因此不会再发生后台重新获取。
我在实现 数据 中使用的表单时遇到问题,通过反应查询从数据库中检索, 应该只单击输入时检索一次,后续单击不应导致重新获取。
如何以干净的方式做到这一点?
挂钩:
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;
},
}
);
};
在组件调用中 onClick={()=>refetch()}
每次点击都重新获取数据。
const {
data: unitOfMeasureSelectData = [],
refetch: refetchUnitOfMeasureSelectData,
} = useUnitOfMeasureSelectData({
queryPageIndex: queryPageIndex,
queryPageSize: queryPageSize,
queryFilters: filterString,
enabled: false,
refetchOnWindowFocus: false,
});
react/native 中的按钮有一个 属性 disabled
,您可以在完成后将其设置为 false。可能的方法是使用 state
<button disabled={this.state.btnDisable}/>
然后你可以在第一次点击按钮时更新状态
//class component
this.setState({btnDisable: false})
//function component
setbtnDisable(false)
看起来您想要一个具有无限陈旧时间的惰性查询:
const [enabled, setEnabled] = useState(false)
useQuery(key, fn, { enabled, staleTime: Infinity })
然后,当你点击输入时,你调用setEnabled: true
。无限的陈旧时间确保查询始终被认为是新鲜的,因此不会再发生后台重新获取。