0Pricing
React Academy · درس

أدوات Zustand للمطورين واختبار المتاجر

اتصل بـ Redux DevTools عبر devtools middleware واختبر إجراءات المتجر مباشرةً باختبارات الوحدة.

أدوات Zustand للمطورين واختبار المتاجر درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

مرحبًا

في هذا الدرس، ستصل مخزن Zustand بـ Redux DevTools لتصحيح الأخطاء بالانتقال الزمني، وستكتب اختبارات وحدات لإجراءات المخزن مباشرةً

البرمجية الوسيطة devtools

غلّف مخزنك بالبرمجية الوسيطة devtools لربطه بإضافة Redux DevTools للمتصفح. ويمكنك بعد ذلك فحص كل إجراء وكل تغيير في الحالة ضمن المخطط الزمني في DevTools
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';

const useStore = create(
  devtools(
    (set) => ({
      count: 0,
      increment: () => set(s => ({ count: s.count + 1 }), false, 'increment'),
    }),
    { name: 'CounterStore' }
  )
);

الإجراءات المسمّاة في DevTools

مرّر اسم الإجراء باعتباره الوسيط الثالث إلى set() عند استخدام devtools. ويظهر هذا التصنيف في المخطط الزمني في DevTools، مما يسهّل تتبع ما تغيّر
set(s => ({ count: s.count + 1 }), false, 'counter/increment');
// Appears as 'counter/increment' in Redux DevTools

دمج persist وdevtools

اربط عدة برمجيات وسيطة بالتسلسل. وغلّف devtools داخل persist لرؤية جميع تغييرات الحالة، بما فيها التغييرات الناتجة عن إعادة ترطيب البيانات من وحدة التخزين
const useStore = create(
  devtools(
    persist(
      (set) => ({ /* ... */ }),
      { name: 'my-store' }
    ),
    { name: 'MyStore' }
  )
);

اختبار مخازن Zustand

مخازن Zustand عبارة عن JavaScript عادي. ويمكنك اختبارها مباشرةً من دون عرض أي مكوّنات React. استورد المخزن واستدعِ getState() وsetState() في اختباراتك
import { useCounterStore } from './store';

beforeEach(() => useCounterStore.setState({ count: 0 }));

test('increment increases count', () => {
  useCounterStore.getState().increment();
  expect(useCounterStore.getState().count).toBe(1);
});

إعادة ضبط الحالة بين الاختبارات

استدعِ setState مع القيم الأولية داخل beforeEach لإعادة ضبط المخزن بين الاختبارات، ومنع تسرّب الحالة بين حالات الاختبار
const initialState = { count: 0, user: null };

beforeEach(() => {
  useMyStore.setState(initialState);
});

محاكاة المخزن في اختبارات المكوّنات

في اختبارات المكوّنات، حاكِ خطاف المخزن لإرجاع قيم متحكم بها. ويتيح لك ذلك اختبار طريقة عرض المكوّن لحالات مختلفة من المخزن من دون تشغيل منطق المخزن الفعلي
vi.mock('./useCounterStore', () => ({
  useCounterStore: vi.fn(() => ({ count: 5, increment: vi.fn() })),
}));

اختبار الإجراءات غير المتزامنة

حاكِ fetch في اختبارك واستدعِ الإجراء غير المتزامن عبر getState(). وانتظر العملية غير المتزامنة باستخدام await، ثم تحقّق من الحالة المحدّثة
global.fetch = vi.fn().mockResolvedValue({
  json: () => Promise.resolve({ id: 1, name: 'Alice' }),
});

await useUserStore.getState().fetchUser(1);
expect(useUserStore.getState().user.name).toBe('Alice');

حماية DevTools في بيئة الإنتاج

عطّل devtools في بيئة الإنتاج من خلال تطبيق البرمجية الوسيطة بشكل مشروط. ويمنع ذلك كشف بنية المخزن للمستخدمين
const isDev = process.env.NODE_ENV === 'development';

const useStore = create(
  isDev ? devtools(storeCreator, { name: 'App' }) : storeCreator
);

البرمجية الوسيطة للتسجيل

يمكنك كتابة برمجية وسيطة مخصصة للتسجيل تسجّل كل تغيير في الحالة في وحدة التحكم، وهو أمر مفيد عندما يتعذر عليك تثبيت إضافات المتصفح
const log = (fn) => (set, get, api) => fn(
  (args, replace, name) => {
    console.log('action', name, args);
    set(args, replace, name);
  }, get, api
);

تحقق سريع

كيف تعيد ضبط مخزن Zustand إلى حالته الأولية بين الاختبارات؟

مراجعة

أضف البرمجية الوسيطة devtools وسمِّ إجراءاتك لتوضيح المخططات الزمنية في DevTools. واختبر المخازن مباشرةً باستخدام getState()/setState() من دون عرض المكوّنات. وأعد ضبط الحالة في beforeEach لعزل الاختبارات

اكتملت الدورة

تهانينا! لقد أتممت **إدارة الحالة باستخدام Zustand**. يمكنك إنشاء المخازن، واستخدام selectors، وحفظ الحالة، وتصحيح الأخطاء باستخدام DevTools، وكتابة اختبارات وحدات لمنطق المخزن

الأسئلة الشائعة

هل درس «أدوات Zustand للمطورين واختبار المتاجر» مجاني؟

نعم — نص درس «أدوات Zustand للمطورين واختبار المتاجر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «أدوات Zustand للمطورين واختبار المتاجر»؟

اتصل بـ Redux DevTools عبر devtools middleware واختبر إجراءات المتجر مباشرةً باختبارات الوحدة. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «أدوات Zustand للمطورين واختبار المتاجر»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء أول متجر Zustand لك
  2. المحددات ومنع إعادة التصيير غير الضرورية
  3. استمرارية الحالة باستخدام Persist Middleware
  4. أدوات Zustand للمطورين واختبار المتاجر
← العودة إلى React Academy