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

async thunk في redux toolkit

Rayden Storm

السؤال

مؤخرا أحاول الانتقال من 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...