【发布时间】:2021-10-16 15:40:44
【问题描述】:
我正在尝试使用 react-query 将我的 API 调用提取到可重用的挂钩中。我需要发送到这个钩子的参数是 moduleName 和 value。出于某种原因,我收到一个错误,我需要遵循 hooks 规则。
请指教。
这是我的代码:
export const useAutoSave = () => {
const fetcher = useCallback(
(
moduleName: ISourceLoaderEditTabs,
value: Partial<ISourceConfigurationEdit[ISourceLoaderEditTabs]>,
saveUrl = '',
) => {
const handleSaveSourceDetailsMutation = useMutation(
(data: ISourceConfigurationEdit) =>
saveUrl
? postSaveStageRaw(`${POST_SAVE_STAGE_RAW}?${saveUrl}`, data)
: saveSourceDetails(data),
);
const sourceId = sessionStorage.getItem('sourceId');
const sourceDetail = queryClient.getQueryData([
'getSourcesDetail',
Number(sourceId),
]);
handleSaveSourceDetailsMutation.mutate(
{
...(sourceDetail as ISourceConfigurationEdit),
[moduleName]: {
...(sourceDetail as ISourceConfigurationEdit)[moduleName],
...value,
},
},
{
onSuccess: async (data) => {
queryClient.setQueryData(
['getSourcesDetail', Number(sourceId)],
data,
);
},
},
);
},
[],
);
return [fetcher];
};
然后在我的组件中我将它用作
const [fetch] = useAutoSave();
fetch('abc', {
name:'a2441918'
})
代码 sn-p : Stackblitz: https://stackblitz.com/edit/react-q8uvse?file=src%2Fhooks.js
【问题讨论】:
标签: reactjs react-hooks react-query