الطفرات باستخدام useMutation
أرسل البيانات إلى واجهات API باستخدام useMutation، وعالج حالات التحميل والخطأ، وأبطِل الاستعلامات عند النجاح.
الطفرات باستخدام useMutation درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
مرحبًا
أساسيات useMutation
import { useMutation } from '@tanstack/react-query';
const { mutate, isLoading, isError } = useMutation({
mutationFn: (newPost) => fetch('/api/posts', {
method: 'POST',
body: JSON.stringify(newPost),
}).then(r => r.json()),
});استدعاء mutate
<button onClick={() => mutate({ title: 'New Post' })}>
Create Post
</button>عمليات الاستدعاء: onSuccess وonError وonSettled
useMutation({
mutationFn: createPost,
onSuccess: (data) => {
console.log('Created:', data);
navigate('/posts/' + data.id);
},
onError: (error) => {
toast.error(error.message);
},
})إبطال الاستعلامات بعد التغيير
import { useQueryClient } from '@tanstack/react-query';
const queryClient = useQueryClient();
const { mutate } = useMutation({
mutationFn: createPost,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['posts'] });
},
});mutateAsync لصيغة await
const { mutateAsync } = useMutation({ mutationFn: createPost });
async function handleSubmit() {
try {
const post = await mutateAsync({ title: 'Draft' });
navigate('/posts/' + post.id);
} catch (err) {
setError(err.message);
}
}تعطيل الإرسال أثناء التغيير
const { mutate, isPending } = useMutation({ mutationFn: saveItem });
<button onClick={() => mutate(item)} disabled={isPending}>
{isPending ? 'Saving...' : 'Save'}
</button>التحديثات المتفائلة باستخدام onMutate
useMutation({
mutationFn: likePost,
onMutate: async (id) => {
await queryClient.cancelQueries({ queryKey: ['posts'] });
const prev = queryClient.getQueryData(['posts']);
queryClient.setQueryData(['posts'], old => old.map(p =>
p.id === id ? { ...p, likes: p.likes + 1 } : p));
return { prev };
},
onError: (err, id, ctx) => queryClient.setQueryData(['posts'], ctx.prev),
onSettled: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
})إعادة ضبط حالة التغيير
const { mutate, isError, reset } = useMutation({ /* ... */ });
{isError && (
<>
<p>Error!</p>
<button onClick={reset}>Try Again</button>
</>
)}تغييرات متعددة بالتوازي
await Promise.all([
mutateAsync({ id: 1, title: 'First' }),
mutateAsync({ id: 2, title: 'Second' }),
]);تحقّق سريع
مراجعة
التالي
الأسئلة الشائعة
هل درس «الطفرات باستخدام useMutation» مجاني؟
نعم — نص درس «الطفرات باستخدام useMutation» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «الطفرات باستخدام useMutation»؟
أرسل البيانات إلى واجهات API باستخدام useMutation، وعالج حالات التحميل والخطأ، وأبطِل الاستعلامات عند النجاح. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الطفرات باستخدام useMutation»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد React Query وQueryClient
- التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية
- الطفرات باستخدام useMutation
- التمرير اللانهائي وتقسيم الصفحات باستخدام useInfiniteQuery