In component,
const [ updateproductapi ] = useUpdateProductMutation()
formdata.append("product_name", product.product_name);
formdata.append("product_price", product.product_price);
formdata.append("file", imagefile)
updateproductapi(product.product_id, formdata)
In ApiSlice,
updateProduct: builder.mutation({
query: (product_id, formdata ) => ({
url: `/product/${product_id}`,
//url: '/product/24',
method: 'PUT',
body: formdata,
}),
invalidatesTags: ['Productmgmt']
}),
When data send to backend program, my backend program will get undefined. I send raw data to backend, req.body will show data. How to solve my problem. Thank you very much.
The query
consumes only a single argument.
query signature
export type query = <QueryArg>( arg: QueryArg, ) => string | Record<string, unknown> // with `fetchBaseQuery` export type query = <QueryArg>(arg: QueryArg) => string | FetchArgs
You are trying to pass two arguments though:
query: (product_id, formdata ) => ({
url: `/product/${product_id}`,
method: 'PUT',
body: formdata,
}),
const [updateProductApi] = useUpdateProductMutation();
formdata.append("product_name", product.product_name);
formdata.append("product_price", product.product_price);
formdata.append("file", imagefile);
updateProductApi(product.product_id, formdata);
This causes formdata
to be undefined in the mutation request.
Update your endpoint logic to consume a single argument object with all the data properties you need.
Example:
query: ({ productId, formData }) => ({
url: `/product/${productId}`,
method: 'PUT',
body: formData,
}),
const [updateProductApi] = useUpdateProductMutation();
formData.append("product_name", product.product_name);
formData.append("product_price", product.product_price);
formData.append("file", imagefile);
updateProductApi({
productId: product.product_id,
formData
});
You might even want to just pass the entire product
object and compose the request and payload in the query function. This simplifies your API and reduces the workload on useUpdateProductMutation
callers.
Example:
query: (product) => {
const formData = new FormData();
formData.append("product_name", product.product_name);
formData.append("product_price", product.product_price);
formData.append("file", imagefile);
return {
url: `/product/${product.product_id}`,
method: 'PUT',
body: formData,
};
},
const [updateProductApi] = useUpdateProductMutation();
updateProductApi(product);