Redux හි thunks හැඳින්වීම
පෙර පරිච්ඡේදයේදී, අපි දත්ත හුවමාරු කිරීම සඳහා
සේවාදායකය, දත්ත සමුදාය සහ අනුග්රාහකය සංවිධානය කළෙමු.
දැන් අපගේ 'සමමුහූර්ත' සංවිධානය කරන ලද Redux
යෙදුම පෙර පරිච්ඡේදයේ අන්තිම පාඩමේදී අපි සාදන ලද අසම්පාර්ශ්වික
අනුග්රාහකය සමඟ අන්තර්ක්රියා කිරීමට, ඉල්ලීම් යැවීමට සහ
ප්රතිචාරයේදී අවශ්ය දත්ත ලබා ගැනීමට උපකාර කරන අවසාන
සේතුව තබා ගත යුතුය.
පෙර කොටසේ පළමු පාඩම් වලින් අපට මතක ඇති පරිදි, Redux
අසම්පාර්ශ්වික තර්කය සමඟ වැඩ කිරීම ගැන කිසිවක් නොදනී
සහ මේ සඳහා අපි thunk middleware භාවිතා කරන්නෙමු. මෙම middleware
අපට යවන ලද actions සමඟ වැඩ කිරීමට, අපගේ thunk හි කේතයේදී
store හි dispatch සහ getState ක්රම භාවිතා කිරීමට,
සහ dispatch ක්රමයට සාමාන්ය JS වස්තූන් පමණක් නොව
ශ්රිත සහ පොරොමිස (promises) වැනි ඇතිවල් සමඟද වැඩ කිරීමට
උපකාර කරයි.
සාමාන්යයෙන් thunk-ශ්රිතය ක්රියා කරවනු ලබන්නේ
dispatch සහ getState (අවශ්ය නම්) යන තර්ක දෙක සමඟිනි,
මෙම තර්ක මෙම ශ්රිතයේ ශරීරය තුළ භාවිතා කළ හැකිය. එය භාවිතයෙන්
සාමාන්ය actions යැවිය හැකිය. එය
store.dispatch හරහාද යැවිය හැකිය.
එවැනි ශ්රිතයක උදාහරණය පහත දක්වා ඇත:
const changeColorThunk = (dispatch, getState) => {
const colorBefore = getState()
console.log(`පැරණි වර්ණය: ${colorBefore.color}`)
dispatch(changeColor())
const colorAfter = getState()
console.log(`නව වර්ණය: ${colorAfter.color}`)
}
store.dispatch(changeColorThunk)
දැන් අපි අපගේ නිෂ්පාදන සමඟ යෙදුම විවෘත කරමු. අපට
යෙදුම ආරම්භ කිරීමේදී සේවාදායකයෙන් ලබා ගත යුතු පළමු දෙය
නම් නිෂ්පාදන ලැයිස්තුවයි. සාමාන්යයෙන් thunks
slice ගොනු වල ලියන බැවින්, අපි ගොනුව විවෘත කරමු
productsSlice.js.
ප්රසන්න පුවත නම්, අපට
Redux Thunk ස්ථාපනය කිරීම සමඟ කලබල වීමට අවශ්ය නොවේ,
මන්ද RTK වෙතින් configureStore ශ්රිතය
එය අප වෙනුවෙන් දැනටමත් කර ඇත. එබැවින් සරලව අපි
createAsyncThunk ගොනුවේදී ආයාත කිරීමට එකතු කරමු:
import { createSlice, nanoid, createAsyncThunk } from '@reduxjs/toolkit'
අපගේ අනුග්රාහකයද ආයාත කිරීමට එකතු කරමු:
import { client } from '../../api/client'
දැන් createAsyncThunk භාවිතයෙන්
නිෂ්පාදන ලබා ගැනීම සඳහා අපගේ පළමු thunk
සාදා ගනිමු, එය කරමු
initialState වස්තුව ප්රකාශයට පත් කිරීමෙන් පසුව:
export const fetchProducts = createAsyncThunk()
createAsyncThunk හි පළමු පරාමිතිය වනුයේ
සාදනු ලබන action වර්ගය සඳහා නූලක් (string)
පිළිගන්නා අතර, දෙවන පරාමිතිය වනුයේ
payload සඳහා වන ආපසු කැඳවුම් ශ්රිතය (callback function),
එය අවසානයේ දත්ත හෝ දෝෂයක් සහිත පොරොමිසයක් (promise) ආපසු දෙනු ඇත
(client.js ගොනුව බලන්න). ශ්රිතයේ කේතය තුළ අපි
client.get කැඳවා එයට මාර්ගය ලබා දෙමු,
එය අපි සේවාදායකයේ නිශ්චිතව දක්වා ඇත
(http.get විසින් පිළිගන්නා පරාමිතීන්
server.js හි බලන්න):
export const fetchProducts = createAsyncThunk(
'products/fetchProducts',
async () => {
const response = await client.get('/fakeServer/products')
return response.data
}
)
ඔබගේ ශිෂ්යයින් සමඟ යෙදුම විවෘත කරන්න.
එහි studentsSlice.js ගොනුව විවෘත කරන්න.
thunk සෑදීම සඳහා createAsyncThunk ශ්රිතය
සහ API ඉල්ලීම් සේවාදායකය වෙත යැවීම සඳහා client
එයට ආයාත කරන්න.
initialState වස්තුව ප්රකාශයට පත් කිරීමෙන් පසුව වහාම
createAsyncThunk භාවිතයෙන් thunk
fetchStudents සාදන්න, ශිෂ්ය ලැයිස්තුව ලබා ගැනීම සඳහා,
එය GET-ඉල්ලීමක් යවනු ඇත
/fakeServer/students ලිපිනයට, නිශ්චිතව දක්වා ඇත
ඔබගේ server.js ගොනුවේ, සහ ආපසු දෙනු ඇත
response.data, පාඩම් ද්රව්ය වල පෙන්වා ඇති පරිදි.
createAsyncThunk සඳහා පළමු පරාමිතිය ලෙස
students/fetchStudents නූල action වර්ගය සඳහා නිශ්චිතව දක්වන්න.