useMutation Hook
এই hook দিয়ে server API request করে post, update, patch ইত্যাদি করা যায়।
useMutation Hook এর ব্যবহার
Step 1
প্রথমে @tanstack/react-query
package থেকে useMutation
hook
named import করে নিতে হবে। এরপরে একটি variable এর মধ্যে useMutation
initiate
করতে হবে। useMutation
এর মধ্যে option দেওয়ার জন্য object pass করতে হবে। যে
object এর মধ্যে mutationFn নামে একটি key দিতে হবে, যেখানে আমরা callback এর
মধ্যে data pass করে api তে send করতে পারি।
import { useMutation } from "@tanstack/react-query";
const ProductAddEdit = () => {
const mutation = useMutation({
mutationFn: (productData) => {
return API.post("/products", productData);
},
});
// rest code to return jsx
return ()
}
Step 2 & Final Step
useMutation
hook অনেক ধরনের state & data & method return করে। প্রথম স্টেপে যে callbackFunction ব্যবহার করেছি, সেটা একটি data argument expect করে, যেটা আমরা form submission এর সময় provide করবো। আগের স্টেপে আমরা useMutation
hook এর সব state, data, method mutation variable
এর মধ্যে receive করা হয়েছে। এই mutation থেকে mutate method এর মধ্যে data দিয়ে দিলেই সেটি mutationFn এর parameter -এ চলে যাবে।
// handle submit
const handleFormSubmit = (e) => {
e.preventDefault();
//save product data to db
mutation.mutate(data);
};
Options
onSuccess
useMutation
hook ব্যবহার এর ২য় স্টেপেই আমাদের ডেটাবেসে data চলে গেছে। কিন্তু, আমাদের UI টা অটোমেটিক updated data show করবে না। কেননা, reactQuery cache থেকে UI তে data show করে থাকে। আমরা যদি চাই database update হবার সাথে সাথে আগের cache invalidate হয়ে নতুন cache তৈরি করে নিতে, তাহলে useQueryClient
hook ব্যবহার করতে হবে।
প্রথমে useQueryClient
hook একটা variable এর মধ্যে initiate করতে হবে। এখানে instance বানানোর প্রয়োজন নেই main.jsx file এর মত। শুধুমাত্র variable এর মধ্যে initiate করলেই হয়ে যাবে।
queryClient এর মধ্যে সব cache করা ডেটার key আছে। আমরা যেহেতু products
key এর মধ্যে products এর সব ডেটা ক্যাশ করতেছিলাম, তাই এই key এর মাধ্যমেই invalidateQueries
এর মধ্যে queryKey দিলেই cache clear হয়ে যাবে আর Database থেকে নতুন data এনে দেখাবে।
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
import API from "../utils/axios";
const ProductAddEdit = () => {
const queryClient = useQueryClient();
const mutation = useMutation({
mutationFn: (productData) => {
return API.post("/products", productData);
},
onSuccess: () => {
queryClient.invalidateQueries(["products"]);
},
});
// rest code to return jsx
retun();
onMutate
এটি একটি callback function নিয়ে থাকে, যেটি mutationFn
এর execute করে থাকে।
onError
এটি একটি callback function নিয়ে থাকে, যেটি server এ request send করার পরে কোন error হলে execute হয়ে থাকে।