![](/img/trans.png)
[英]React-query: looping through useMutation can only retrieve the last request data
[英]Can't I put multiple data arguments in the react-query useMutation hook?
如果您查看指南,useMutation Hook 參數的結構是這樣的。
const {
data,
error,
isError,
isIdle,
isLoading,
isPaused,
isSuccess,
mutate,
mutateAsync,
reset,
status,
} = useMutation(mutationFn, {
cacheTime,
mutationKey,
networkMode,
onError,
onMutate,
onSettled,
onSuccess,
retry,
retryDelay,
useErrorBoundary,
meta
})
異步 axios function 的結構如下:
async function setSupplierRegister(
basic: Basic,
operator: Operator,
delivery: Delivery,
bank: Bank
): Promise<void> {
await axiosInstance.post("/register", {
basic: basic,
operator: operator,
delivery: delivery,
bank: bank,
});
}
異步 function 需要 4 個 arguments,但在 useMutation Hook 參數中只能檢索 1 個數據值。 因此,如果聲明4個arguments來使用Mutation,就會出現錯誤。
export function useRegister(): UseMutateFunction<
void,
unknown,
any,
unknown
> {
const { mutate } = useMutation(
// (basic: Basic, operator: Operator, delivery: Delivery, bank: Bank) => setSupplierRegister(basic, operator, delivery, bank), error
(data: any) => setSupplierRegister(data),
);
return mutate;
}
我應該如何處理它在useMutation function中聲明4 arguments?
您可以在數組中添加 arguments 例如:
export function useRegister(): UseMutateFunction<
void,
unknown,
any,
unknown
> {
const { mutate } = useMutation(
// (basic: Basic, operator: Operator, delivery: Delivery, bank: Bank) => setSupplierRegister(basic, operator, delivery, bank), error
([basic: Basic, operator: Operator, delivery: Delivery, bank: Bank]) => setSupplierRegister(basic, operator, delivery, bank),
);
return mutate;
}
而不是調用突變:
mutate([basic, operator, delivery, bank])
第二個選項是使用 object,但您需要重構setSupplierRegister
function:
async function setSupplierRegister(data): Promise<void> {
await axiosInstance.post("/register", {
data
});
}
您可以保留useMutation
原樣,然后像這樣調用 mutate :
mutate({ basic, operator, delivery, bank })
在我看來,第二種方法更簡潔易讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.