📋 محتويات الصفحة
📖 الوصف
XState هي مكتبة لإنشاء، وتفسير، وتنفيذ state machines و statecharts في JavaScript. تعتمد على Statecharts specification (David Harel) وتُقدم طريقة رسمية لإدارة state معقدة. XState مناسبة للمشاريع التي تحتاج لـ state management معقد – multi-step forms, workflows, auth flows، أو أي شيء يتطلب transitio...
🎯 يستخدم في
مجالات استخدام هذه الأداة
Multi-step forms (wizard flows)
Authentication flows (idle → loading → authenticated)
Complex UI interactions
Workflow management
State machines في أي framework
✨ المميزات
أبرز مميزات هذه الأداة
State machines الرسمية (prevents invalid states)
Visualizer للمخططات (stately.ai)
Framework-agnostic
Nested states (hierarchical)
Parallel states
History states
Guards وactions
Services (async operations)
TypeScript inference ممتاز
Actor model (v5)
⚠️ العيوب
نقاط يجب مراعاتها
منحنى تعليمي صعب
boilerplate كبير للمشاريع البسيطة
أداء overhead في المشاريع الكبيرة
مجتمع أصغر من Redux/Zustand
Statecharts قد تكون صعبة الفهم للمبتدئين
🔄 البدائل
أدوات بديلة يمكنك استخدامها
💻 مثال على الاستخدام
كيفية استخدام هذه الأداة
import { createMachine, createActor } from 'xstate';
// Auth state machine
const authMachine = createMachine({
id: 'auth',
initial: 'idle',
states: {
idle: {
on: { LOGIN: 'loading' },
},
loading: {
invoke: {
src: 'loginUser',
onDone: 'authenticated',
onError: 'error',
},
},
authenticated: {
on: { LOGOUT: 'idle' },
},
error: {
on: { RETRY: 'loading' },
},
},
}, {
actions: {},
services: {
loginUser: async (context, event) => {
return await api.login(event.credentials);
},
},
});
// Start the machine
const actor = createActor(authMachine);
actor.start();
// Send events
actor.send({ type: 'LOGIN', credentials: { email, password } });
// Subscribe to state changes
actor.subscribe((state) => {
console.log('Current state:', state.value);
});
// React hook
import { useMachine } from '@xstate/react';
function LoginButton() {
const [state, send] = useMachine(authMachine);
return (
<>
{state.matches('idle') && (
<button onClick={() => send({ type: 'LOGIN' })}>
تسجيل الدخول
</button>
)}
{state.matches('loading') && <p>جاري الدخول...</p>}
{state.matches('authenticated') && <p>مرحباً!</p>}
{state.matches('error') && (
<button onClick={() => send({ type: 'RETRY' })}>
إعادة المحاولة
</button>
)}
</>
);
}
📚 أدوات أخرى في State-Management
قد يعجبك أيضاً
Effector
مكتبة إدارة حالة reactive (Reactive State Management)
Jotai
⭐مكتبة إدارة حالة ذرية (Atomic State Management)
MobX
⭐مكتبة إدارة حالة تفاعلية (Reactive State Management)
Nano Stores
مكتبة إدارة حالة خفيفة (Tiny State Manager)
NgRx
⭐مكتبة إدارة الحالة لـ Angular (Angular State Management)
Pinia
⭐مكتبة إدارة الحالة الرسمية لـ Vue (Vue State Management)