Redux-এ Action Dispatch হল সেই প্রক্রিয়া যেখানে অ্যাপ্লিকেশন কোনো একশন (Action) স্টোরে পাঠায়। একশন হল একটি অবজেক্ট, যা স্টেট পরিবর্তনের সংকেত দেয়, এবং dispatch() ফাংশন ব্যবহার করে একশনটি রিডিউসারকে পৌঁছানো হয়। একবার একশন ডিসপ্যাচ হলে, রিডিউসার স্টেটের পরিবর্তন ঘটায় এবং সেই পরিবর্তিত স্টেট স্টোরে সংরক্ষিত হয়। এর পর, স্টোরে থাকা নতুন স্টেটের ভিত্তিতে UI আপডেট হয়।
Action Dispatch করার মাধ্যমে Redux স্টেট ম্যানেজমেন্টের কার্যপ্রণালী শুরু হয়, যা একক বা অ্যাসিনক্রোনাস কার্যকলাপের ফলস্বরূপ হতে পারে।
Action Dispatch কী?
Action Dispatch হল একশনটি রিডিউসারে পাঠানোর প্রক্রিয়া। যখন আপনি dispatch() ফাংশন ব্যবহার করেন, তখন আপনি একশনটি স্টোরে পাঠাচ্ছেন, যাতে রিডিউসার তা প্রক্রিয়া করে স্টেট পরিবর্তন করতে পারে। এটি Redux-এর মূল স্টেপ যেখানে একশনকে কার্যকরী করা হয় এবং স্টেট আপডেট হয়।
Action Dispatch করার প্রক্রিয়া
- Action তৈরি: প্রথমে একটি একশন অবজেক্ট তৈরি করা হয়, যা স্টেট পরিবর্তন করার উদ্দেশ্যে রিডিউসারকে নির্দেশ দেয়। একশনটি সাধারণত
typeএবংpayloadধারণ করে। - Dispatching Action: একবার একশন তৈরি হলে,
dispatch()ফাংশন ব্যবহার করে সেই একশনটি স্টোরে পাঠানো হয়। এটি রিডিউসারের মাধ্যমে স্টেট পরিবর্তন প্রক্রিয়া শুরু করে। - Reducer: রিডিউসার একশন গ্রহণ করে, স্টেটের একটি নতুন কপি তৈরি করে এবং এটি স্টোরে সঞ্চিত হয়। এরপর স্টোরের মাধ্যমে UI আপডেট হয়।
Action Dispatch করার উদাহরণ
ধরা যাক, আমাদের একটি অ্যাপ্লিকেশন আছে যেখানে আমরা একটি টুডু আইটেম যোগ করতে চাই। প্রথমে, আমরা একটি একশন তৈরি করব এবং পরে সেটি ডিসপ্যাচ করব।
১. Action তৈরি করা
// Action
const addTodoAction = {
type: 'ADD_TODO',
payload: {
id: 1,
text: 'Learn Redux'
}
};
এখানে, addTodoAction একটি একশন অবজেক্ট, যেখানে type হিসেবে 'ADD_TODO' এবং payload হিসেবে টুডু আইটেমের তথ্য রয়েছে।
২. Dispatch Action
Redux স্টোরে একশন ডিসপ্যাচ করতে, আপনি dispatch() ফাংশন ব্যবহার করবেন:
store.dispatch(addTodoAction);
এখানে, dispatch() ফাংশনটি addTodoAction একশনটি স্টোরে পাঠাচ্ছে, যা রিডিউসারকে নির্দেশ দেবে যে, একটি নতুন টুডু আইটেম যোগ করতে হবে।
৩. Reducer
// Reducer
function todosReducer(state = [], action) {
switch (action.type) {
case 'ADD_TODO':
return [...state, action.payload];
default:
return state;
}
}
এখানে, todosReducer একটি রিডিউসার ফাংশন, যা ADD_TODO টাইপের একশন পাওয়ার পর স্টেটের একটি নতুন কপি তৈরি করে এবং নতুন টুডু আইটেম যোগ করে।
Dispatch এর সাথে State পরিবর্তন
Redux এর ডেটা ফ্লো একমুখী থাকে, এবং dispatch() এর মাধ্যমে স্টেট পরিবর্তন প্রক্রিয়া শুরু হয়। এই একমুখী ডেটা ফ্লোতে স্টেট কেবল একমাত্র রিডিউসারের মাধ্যমে পরিবর্তিত হয়, এবং একশন পাঠানোর মাধ্যমে সেই পরিবর্তন ঘটে।
একমুখী ডেটা ফ্লো:
- Action Dispatch →
store.dispatch(action) - Reducer →
storeস্টেটের নতুন কপি তৈরি করে। - Store → স্টোর নতুন স্টেট ধারণ করে।
- UI Update → নতুন স্টেটের ভিত্তিতে UI আপডেট হয়।
Asynchronous Action Dispatch (Redux Thunk ব্যবহার করে)
যখন আপনি অ্যাসিনক্রোনাস কাজ (যেমন API কল) করতে চান, তখন Redux Thunk মiddleware ব্যবহার করতে পারেন। Redux Thunk আপনাকে একশন ক্রিয়েটর ফাংশনে একটি ফাংশন ফেরত দেওয়ার অনুমতি দেয়, যা পরে ডিসপ্যাচ করা হয়।
উদাহরণ: অ্যাসিনক্রোনাস Action Dispatch
// Action creator with Thunk (Asynchronous action)
function fetchTodos() {
return function(dispatch) {
dispatch({ type: 'FETCH_TODOS_START' });
fetch('/api/todos')
.then(response => response.json())
.then(data => {
dispatch({ type: 'FETCH_TODOS_SUCCESS', payload: data });
})
.catch(error => {
dispatch({ type: 'FETCH_TODOS_FAILURE', payload: error });
});
};
}
এখানে, fetchTodos একটি অ্যাসিনক্রোনাস একশন ক্রিয়েটর, যা API কল করে এবং সাফল্য বা ব্যর্থতার ভিত্তিতে একশন ডিসপ্যাচ করে।
Redux DevTools এর মাধ্যমে Action Dispatch পরীক্ষা
Redux DevTools হল একটি ডেভেলপার টুল, যা Redux অ্যাপ্লিকেশনের স্টেট পরিবর্তন এবং একশন ডিসপ্যাচের কার্যপ্রণালী পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি আপনাকে একশন ডিসপ্যাচ করার পর স্টোরের পরিবর্তন দেখতে এবং অ্যাপ্লিকেশনটি ডিবাগ করতে সহায়তা করে।
সারাংশ
Action Dispatch Redux-এর একটি গুরুত্বপূর্ণ অংশ, যা স্টেট পরিবর্তন করার সংকেত দেয়। একশনটি ডিসপ্যাচ করার মাধ্যমে, রিডিউসার স্টেট পরিবর্তন করে এবং নতুন স্টেট স্টোরে সঞ্চিত হয়। অ্যাসিনক্রোনাস কাজের জন্য Redux Thunk ব্যবহার করা হয়, যা আপনাকে একশন ক্রিয়েটরের মাধ্যমে ডাইনামিকলি ডিসপ্যাচ করার সুযোগ দেয়। Redux-এর একমুখী ডেটা ফ্লো এবং dispatch এর মাধ্যমে স্টেট পরিবর্তন অ্যাপ্লিকেশনকে আরো স্কেলেবল, পূর্বানুমানযোগ্য এবং ডিবাগযোগ্য করে তোলে।
Read more