📋 محتويات الصفحة
📖 الوصف
Redux Toolkit (RTK) هو الطريقة الرسمية الموصى بها لكتابة كود Redux. يبسط العمليات المعقدة في Redux التقليدية مثل إنشاء store، كتابة reducers، والاتصال بالـ API (عبر RTK Query). يوفر أدوات مثل `createSlice`, `configureStore`, و `createAsyncThunk`. Redux Toolkit يحل مشاكل Redux التقليدية: boilerplate...
🎯 يستخدم في
مجالات استخدام هذه الأداة
تطبيقات React كبيرة تحتاج إدارة حالة مركزية
تطبيقات enterprise معقدة
تطبيقات تحتاج لـ time-travel debugging
تطبيقات مع cache من APIs (RTK Query)
State management عبر عدة features
✨ المميزات
أبرز مميزات هذه الأداة
Boilerplate أقل بكثير من Redux التقليدي
RTK Query لإدارة API cache
Immer مدمج (state mutations مباشرة)
Redux DevTools مدمج
TypeScript support ممتاز
createSlice يُبسّط الـ reducers
createAsyncThunk للـ async operations
Built-in best practices
⚠️ العيوب
نقاط يجب مراعاتها
لا يزال boilerplate زائد مقارنة بـ Zustand/Jotai
منحنى تعليمي متوسط
حجم الحزمة أكبر من البدائل الأبسط
RTK Query قد يكون معقداً للمبتدئين
🔄 البدائل
أدوات بديلة يمكنك استخدامها
💻 مثال على الاستخدام
كيفية استخدام هذه الأداة
// features/counter/counterSlice.ts
import { createSlice, PayloadAction, createAsyncThunk } from '@reduxjs/toolkit';
interface CounterState {
value: number;
status: 'idle' | 'loading' | 'failed';
}
const initialState: CounterState = { value: 0, status: 'idle' };
export const fetchCount = createAsyncThunk(
'counter/fetchCount',
async (amount: number) => {
const response = await fetch('/api/counter');
return response.json();
}
);
const counterSlice = createSlice({
name: 'counter',
initialState,
reducers: {
increment: (state) => { state.value += 1; },
decrement: (state) => { state.value -= 1; },
incrementByAmount: (state, action: PayloadAction<number>) => {
state.value += action.payload;
},
},
extraReducers: (builder) => {
builder
.addCase(fetchCount.pending, (state) => { state.status = 'loading'; })
.addCase(fetchCount.fulfilled, (state, action) => {
state.status = 'idle';
state.value = action.payload;
});
},
});
export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export default counterSlice.reducer;
// app/store.ts
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from '../features/counter/counterSlice';
export const store = configureStore({
reducer: { counter: counterReducer },
});
// components/Counter.tsx
import { useDispatch, useSelector } from 'react-redux';
import { RootState, AppDispatch } from '../app/store';
import { increment, decrement } from '../features/counter/counterSlice';
export function Counter() {
const count = useSelector((state: RootState) => state.counter.value);
const dispatch = useDispatch<AppDispatch>();
return (
<div>
<p>العدد: {count}</p>
<button onClick={() => dispatch(increment())}>زيادة</button>
<button onClick={() => dispatch(decrement())}>تقليل</button>
</div>
);
}
📚 أدوات أخرى في 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)