Redux တွင် Action Object အတွက် ဒေတာများကို ပြင်ဆင်ခြင်း
မကြာသေးမီက ကျွန်ုပ်တို့ ဆွေးနွေးခဲ့သည်မှာ
function createSlice သည်
action.payload ဖန်တီးရာတွင် argument တစ်ခုကိုသာ
မျှော်လင့်သည်ဟူ၏။
တစ်ဖက်တွင် ဤသည်က ၎င်း၏အသုံးပြုမှုကို ရိုးရှင်းစေသော်လည်း၊
အခြားတစ်ဖက်တွင် action object ၏ အကြောင်းအရာများကို
ပြင်ဆင်ရန် အပိုလုပ်ဆောင်ချက်များ လိုအပ်နိုင်ပါသည်။
ကျွန်ုပ်တို့၏ ထုတ်ကုန်များအက်ပ်ကို ဖွင့်ကြည့်ပါ၊
ထိုအတွင်းရှိ ဖိုင်အမည် NewProductForm.jsx ကို ဖွင့်ပါ။
အောက်ပါကုဒ်လိုင်းကို သတိပြုပါ။
NewProductForm.jsxdispatch(productAdded({
id: nanoid(), name, desc, price, amount
}))
ဤနေရာတွင် ကျွန်ုပ်တို့သည် payload object ကို
React component အတွင်း တိုက်ရိုက်စုဆောင်းပြီး
action productAdded သို့ ထည့်ပေးနေပါသည်။
အလားတူ action ကို component အများအပြားမှ
ပို့ရန် လိုအပ်လာပါက သို့မဟုတ်
စုဆောင်းရန် logic များ ရှုပ်ထွေးလာပါက ဘာလုပ်မလဲ။
အယူအဆအရ ကျွန်ုပ်တို့၏ component သည်
ဤ action အတွက် payload အတွင်းရှိ object ပုံစံကို
သိရန် မလိုအပ်သင့်ပါ။
ထို့အပြင် ကုဒ်များကို အဆက်မပြတ် ထပ်တူပြုခြင်းကိုလည်း ကျွန်ုပ်တို့ သဘောမတွေ့ပါ။
ဤပြဿနာများကို ကျွန်ုပ်တို့၏ နာမည်ကြီး createSlice က
ထပ်မံကူညီဖြေရှင်းပေးနိုင်ပါသည်၊
အဘယ်ကြောင့်ဆိုသော် reducer ရေးသားရာတွင် ၎င်းသည်
callback function prepare ကို အသုံးပြုခွင့်ပေးပြီး၊
�ိုအတွင်း၌ logic အမျိုးမျိုးရေးသားခြင်း၊ ကျပန်းနံပါတ်များ ထုတ်ခြင်းနှင့် အခြားအရာများ ပြုလုပ်နိုင်ပါသည်။
ထိုသို့သောအခြေအနေတွင် reducer field အတွက် တန်ဖိုးကို
အောက်ပါ object ပုံစံဖြင့် ကိုယ်စားပြုနိုင်ပါသည်။
jsx{reducer, prepare}
ယခု ကျွန်ုပ်တို့၏ ဖိုင် productsSlice.js ကို ဖွင့်ပါ
ပြီးလျှင် reducer productAdded အတွက် ကုဒ်ကို ပြောင်းလဲပါ။
ယခု ကုဒ်၏ ဤအပိုင်းသည်။
products/ProductSlice.jsproductAdded(state, action) {
state.push(action.payload)
},
ကျွန်ုပ်တို့ အောက်ပါအတိုင်း ပြောင်းလဲမည်၊ ထိုတွင်
function reducer သည် store အတွင်း state ကို အပ်ဒိတ်လုပ်ရန် တာဝန်ယူမည်၊
prepare သည် ကျွန်ုပ်တို့၏ အခြားဒေတာများနှင့်အတူ
ထုတ်လုပ်ထားသော id ပါသည့် payload object ကို
ပြန်ပေးရန် တာဝန်ယူမည်။
products/ProductSlice.jsproductAdded: {
reducer(state, action) {
state.push(action.payload)
},
prepare(name, desc, price, amount) {
return {
payload: {
id: nanoid(),
name,
desc,
price,
amount,
},
}
},
},
ယခု ကျွန်ုပ်တို့သည် id ကို component ထဲတွင် မဟုတ်ဘဲ ဤနေရာတွင် ထုတ်လုပ်မည်ဖြစ်သောကြောင့်၊ import ထဲသို့ nanoid ကို ထည့်ကြပါစို့။
products/ProductSlice.jsimport { createSlice, nanoid } from '@reduxjs/toolkit'
နောက်ဆုံးတွင်
NewProductForm.jsx အတွင်း ပြောင်းလဲမှုများ ပြုလုပ်ပါ။
အောက်ပါလိုင်းအစား။
products/NewProductForm.jsxdispatch(productAdded({
id: nanoid(), name, desc, price, amount
}))
ကျွန်ုပ်တို့လိုအပ်သော ဒေတာများကို ကျောက်ချပ်ဖြင့် ပို့ဆောင်ပေးသည့်
အောက်ပါလိုင်းကို အသုံးပြုမည် (ဤဖိုင်တွင် import ထဲမှ
nanoid ကို ဖယ်ရှားရန် မမေ့ပါနှင့်)။
products/NewProductForm.jsxdispatch(productAdded(name, desc, price, amount))
အက်ပ်ကို စတင်ပါ၊ ထို့နောက် ထုတ်ကုန်အသစ်တစ်ခု ဖန်တီးပြီး ကျွန်ုပ်တို့ ဘာမှ မပျက်စီးကြောင်း သေချာပါစေ။
သင်၏ ကျောင်းသားများအက်ပ်ကို ဖွင့်ပါ။
ဖိုင် StudentsSlice.js ထဲတွင် သင်၏ reducer
studentAdded ကို သင်ခန်းစာတွင် ပြထားသည့်အတိုင်း
object {reducer, prepare} ပုံစံဖြင့် ပြန်ရေးပါ။
သင်ခန်းစာတွင် ပြထားသည့်အတိုင်း
ဖိုင် NewStudentForm.jsx ထဲတွင် သက်ဆိုင်ရာ ပြောင်းလဲမှုများ ပြုလုပ်ပါ။
အက်ပ်ကို စတင်ပါ ပြီးလျှင် အရာရာ ယခင်အတိုင်း အလုပ်လုပ်နေကြောင်း သေချာပါစေ။