🔄 مميز

Redux Toolkit

إدارة الحالة الرسمية لـ Redux (State Management - Modern Redux)

(5/5)
👁️ 4 مشاهدة
📅 02 Jul 2026
⚛️ React 🌐 عام

مستوى الخبرة المطلوب:

🔗 زيارة الموقع الرسمي
5
تقييم المستخدمين
التصنيف 🔄 State-Management
المشاهدات 4
تاريخ الإضافة 02/07/2026
آخر تحديث 02/07/2026

📖 الوصف

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 قد يكون معقداً للمبتدئين

🔄 البدائل

أدوات بديلة يمكنك استخدامها

Zustand
MobX
Jotai

💻 مثال على الاستخدام

كيفية استخدام هذه الأداة

Example Code
// 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

قد يعجبك أيضاً