اذهب إلى المحتوى

السؤال

نشر

مؤخرا أحاول الانتقال من redux الى redux toolkit وقد تعودت على الأساسيات الخاصة ب reducer

import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  value: 10,
};

const counterSlice = createSlice({
  name: 'counter',
  initialState,
  reducers: {
    increment(state) {
      state.value++;
    },
    decrement(state) {
      state.value--;
    },
    incrementby(state, action) {
      state.value += action.payload;
    },
  },
});

export const { increment, decrement, incrementby } = counterSlice.actions;
export default counterSlice.reducer;

لكن ماذا اذا اردت عمل dispatch ل action تجلب البيانات من السيرفر ب axios كيف يمكن القيام بذلك في حالة استخدام redux toolkit

Recommended Posts

  • 0
نشر

يمكنك إستخدام createAsyncThunk 

الخطوة الأولى قم بإنشاء "thunk" كالتالي 

const fetchUserById = createAsyncThunk(
  'users/fetchByIdStatus',
  async (userId, thunkAPI) => {
    const response = await userAPI.fetchById(userId)
    return response.data
  }
)

الخطوة الثانيه
قم بالتعامل مع هذا الأكشن داخل ال reducer 
عن طريق إستخدام extraReducers كالتالي 


const usersSlice = createSlice({
  name: 'users',
  initialState: { entities: [], loading: 'idle' },
  reducers: {
  },
  extraReducers: {
    [fetchUserById.fulfilled]: (state, action) => {
      state.entities.push(action.payload)
    },
  },
})


وأخيرا يمكنك أن تستدعي هذا ال "thunk" وعمل "dispatch"

dispatch(fetchUserById(123))

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...