Redux တွင် thunk ကိုအသုံးပြု၍ ဒေတာများပို့ခြင်း

ယခင်သင်ခန်းစာတွင် ကျွန်ုပ်တို့၏ fake server ပေါ်ရှိ POST request ကိုကိုင်တွယ်ခြင်းအကြောင်း လေ့လာခဲ့ကြသည်။ ယခု server သို့ request ပို့ပေးမည့် thunk function တစ်ခုကိုရေးသားကြပါစို့။

ကျွန်ုပ်တို့၏ ထုတ်ကုန်များအက်ပ်ကိုဖွင့်ပါ၊ ၎င်းအတွင်းရှိ productsSlice.js ဖိုင်ကိုလည်းဖွင့်ပါ။ ယခု thunk fetchProducts ပြီးနောက် createAsyncThunk ကိုအသုံးပြု၍ thunk addProduct ကိုဖန်တီးပါမည်။

products/productsSlice.jsexport const addProduct = createAsyncThunk()

ပထမအကြိမ်သတ်မှတ်ချက်အဖြစ် createAsyncThunk ထဲသို့ 'products/addProduct' ကိုထည့်သွင်းပါ၊ ဒုတိယအကြိမ်သတ်မှတ်ချက်အဖြစ် ထုတ်ကုန်အသစ်၏ ဒေတာများပါဝင်သည့် object ကိုလက်ခံမည့် asynchronous callback function ထည့်သွင်းပါမည်။

products/productsSlice.jsexport const addProduct = createAsyncThunk(
  'products/addProduct',
  async (newProduct) => {}
)

ဤ callback ၏ကုဒ်ထဲတွင် ကျွန်ုပ်တို့သည် client ခေါ်ဆိုမည်၊ လမ်းကြောင်းနှင့် ထုတ်ကုန်ပါဝင်သည့် object ကိုအကြိမ်သတ်မှတ်ချက်အဖြစ် ပေးမည်၊ ထို့နောက် တုံ့ပြန်ချက်၏ ဒေတာများကို return ပြန်မည်။

products/productsSlice.jsexport const addProduct = createAsyncThunk(
  'products/addProduct',
  async (newProduct) => {
    const response = await client.post('/fakeServer/products', newProduct)
    return response.data
  }
)

ယခု အောက်ရှိကုဒ်တွင် productsSlice အတွက် reducers field ကိုကြည့်ရှုပါ။ ယခင်က ကျွန်ုပ်တို့သည် reducer နှင့် prepare method များပါဝင်သည့် reducer productAdded ကိုအသုံးပြု၍ ထုတ်ကုန်အသစ်ထည့်သွင်းခဲ့သည်။ ယခု ကျွန်ုပ်တို့သည် server တွင် လိုအပ်သောဒေတာများကိုထုတ်လုပ်ပြီး thunk နှင့်လုပ်ဆောင်နေသဖြင့် ဤနေရာတွင် reducer productAdded ကို ကုဒ်ထဲမှလုံးဝဖယ်ရှားပါမည်။ ထို့နောက် extraReducers method (၎င်း၏ကုဒ်အဆုံးသို့) ထဲသို့ နောက်ထပ် reducer အပို တစ်ခုထည့်သွင်းပါမည်။ ၎င်းသည် တောင်းဆိုမှုအောင်မြင်ပါက slice products ထဲသို့ action ၏ payload ထဲမှ တိုက်ရိုက်ထုတ်ကုန်အသစ်ထည့်သွင်းပေးမည် (createSlice ၏ တစ်မူထူးခြားမှုကြောင့် ဤသို့ကုဒ်ရေးနိုင်ကြောင်း သတိရပါ)။

products/productsSlice.js.addCase(addProduct.fulfilled, (state, action) => {
  state.products.push(action.payload)
})

ဟုတ်ပါတယ်၊ မှတ်မိစေရန်၊ import စာကြောင်းများမှ nanoid ကိုဖယ်ရှားပါ၊ ဖိုင်အဆုံးရှိ actions export ထဲမှ productAdded ကိုလည်းဖယ်ရှားပါ။

Задание 1

သင်၏ ကျောင်းသားများအက်ပ်ကိုဖွင့်ပါ။ ၎င်းအတွင်းရှိ studentsSlice.js ဖိုင်ကိုဖွင့်ပါ။ createAsyncThunk ကိုအသုံးပြု၍ နောက်ထပ် thunk addStudent တစ်ခုဖန်တီးပါ။ ၎င်းသည် သင်ခန်းစာတွင်ပြသထားသည့်အတိုင်း ကျောင်းသားအသစ်ထည့်သွင်းရန် server သို့ POST request ပို့ပေးမည်ဖြစ်သည်။

Задание 2

ထို့နောက် အောက်တွင် studentsSlice အတွက် ပြောင်းလဲမှုများပြုလုပ်ပါ။ reducers property အတွင်းရှိ reducer studentAdded ကို လုံးဝဖယ်ရှားပါ။ extraReducers field ထဲသို့ နောက်ထပ် reducer အပိုတစ်ခုထည့်သွင်းပါ။ ၎င်းသည် သင်ခန်းစာတွင်ပြသထားသည့်အတိုင်း တောင်းဆိုမှုအောင်မြင်ပါက slice students ထဲသို့ action ၏ payload မှ ကျောင်းသားအသစ်ကိုထည့်သွင်းပေးမည်။