You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/extracting-state-logic-into-a-reducer.md
+23-23Lines changed: 23 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ title: State Logic কে একটি Reducer এ স্থানান্ত
19
19
20
20
## State logic কে একটি reducer এ একত্র করুন {/*consolidate-state-logic-with-a-reducer*/}
21
21
22
-
ধীরে ধীরে যখন আপনার কম্পোনেন্টগুলোর জটিলতা বাড়তে থাকে, তখন এক নজর দেখে এটা বোঝা কঠিন হয়ে যেতে পারে যে কতোনা উপায়ে একটা কম্পোনেন্টের state আপডেট হতে পারে। উদাহরণস্বরূপ, নিচের `TaskApp` কম্পোনেন্টটি `tasks` নামক array কে state হিসেবে ধারণ করে, আর কোনো task কে add, edit, remove করার জন্য তিনটি ভিন্ন ভিন্ন event handler এর ব্যবহার করে:
22
+
ধীরে ধীরে যখন আপনার কম্পোনেন্টগুলোর জটিলতা বাড়তে থাকে, তখন এক নজর দেখে এটা বোঝা কঠিন হয়ে যেতে পারে যে কতোনা উপায়ে একটা কম্পোনেন্টের state আপডেট হতে পারে। উদাহরণস্বরূপ, নিচের `TaskApp` কম্পোনেন্টটি `tasks` নামক array কে state হিসেবে ধারণ করে, আর কোনো task কে add, edit, remove করার জন্য তিনটি ভিন্ন ভিন্ন event handler এর ব্যবহার করেঃ
23
23
24
24
<Sandpack>
25
25
@@ -181,15 +181,15 @@ li {
181
181
182
182
এর প্রতিটি event handler state কে আপডেট করার জন্য `setTasks` কে call করে। ধীরে ধীরে যখন এ কম্পোনেন্টটি আকারে বাড়তে থাকবে, তখন সাথে সাথে এর ভিতরকার state logic ও বাড়তে থাকবে এবং জটিলতর হতে থাকবে। এই জটিলতা কমাতে এবং আপনার সব state logic একটি সহজে-পাওয়া-যায় এমন জায়গায় রাখতে, আপনি ঐসব state logic কে আপনার কম্পোনেন্টের বাইরে একটি function এ স্থানান্তর করতে পারেন, যে function টিকে বলা হয় **"reducer".**
183
183
184
-
Reducer হলো state হ্যান্ডেল করার একটি বিকল্প পদ্ধতি। আপনি `useState` থেকে `useReducer` এ তিনটি ধাপে স্থানান্তর করতে পারেন:
184
+
Reducer হলো state হ্যান্ডেল করার একটি বিকল্প পদ্ধতি। আপনি `useState` থেকে `useReducer` এ তিনটি ধাপে স্থানান্তর করতে পারেনঃ
185
185
186
186
1. state কে set করার বদলে action কে **dispatch করতে শুরু করুন**।
187
187
2. একটি reducer function **লিখুন**।
188
188
3. reducer টিকে আপনার কম্পোনেন্ট থেকে **ইউজ করুন**।
189
189
190
-
### ধাপ ১: State কে set করার বদলে action কে dispatch করতে শুরু করুন {/*step-1-move-from-setting-state-to-dispatching-actions*/}
190
+
### ধাপ ১ঃ State কে set করার বদলে action কে dispatch করতে শুরু করুন {/*step-1-move-from-setting-state-to-dispatching-actions*/}
191
191
192
-
State কে set করার মাধ্যমে আপনার event handler গুলো বর্তমানে নির্ধারণ করছে যে কী করতে হবে:
192
+
State কে set করার মাধ্যমে আপনার event handler গুলো বর্তমানে নির্ধারণ করছে যে কী করতে হবেঃ
193
193
194
194
```js
195
195
functionhandleAddTask(text) {
@@ -220,7 +220,7 @@ function handleDeleteTask(taskId) {
220
220
}
221
221
```
222
222
223
-
এখন সব state সেট করার logic দূর করে দিন। এখন আপনার কাছে যা বাকি থাকবে তা হলো:
223
+
এখন সব state সেট করার logic দূর করে দিন। এখন আপনার কাছে যা বাকি থাকবে তা হলোঃ
224
224
225
225
- ইউজার যখন "Add" প্রেস করে তখন call করা হয় `handleAddTask(text)`।
226
226
- ইউজার যখন "Save" প্রেস করে কিংবা কোনো task কে toggle (বা edit) করে তখন call করা হয় `handleChangeTask(task)`।
@@ -252,7 +252,7 @@ function handleDeleteTask(taskId) {
252
252
}
253
253
```
254
254
255
-
আপনি `dispatch` এর কাছে যে object টি pass করেন, তাকে একটি "action" বলে:
255
+
আপনি `dispatch` এর কাছে যে object টি pass করেন, তাকে একটি "action" বলেঃ
256
256
257
257
```js {3-7}
258
258
functionhandleDeleteTask(taskId) {
@@ -284,7 +284,7 @@ dispatch({
284
284
285
285
</Note>
286
286
287
-
### ধাপ ২: একটি reducer function লিখুন {/*step-2-write-a-reducer-function*/}
287
+
### ধাপ ২ঃ একটি reducer function লিখুন {/*step-2-write-a-reducer-function*/}
288
288
289
289
একটি reducer function হলো যেখানে আপনি আপনার state লজিক রাখবেন। এটি দুটি argument নেয়, বর্তমান state এবং action অবজেক্ট, অতঃপর এটি পরবর্তী state কে return করেঃ
290
290
@@ -296,7 +296,7 @@ function yourReducer(state, action) {
296
296
297
297
আপনি reducer থেকে যা return করবেন, React সেটিকে state হিসেবে সেট করে দিবে।
298
298
299
-
এই উদাহরণে, state সেট করার লজিককে event handlers থেকে একটি reducer function এ সরাতে, আপনার:
299
+
এই উদাহরণে, state সেট করার লজিককে event handlers থেকে একটি reducer function এ সরাতে, আপনারঃ
300
300
301
301
1. বর্তমান state (`tasks`) কে প্রথম argument হিসেবে declare করতে হবে।
302
302
2.`action` অবজেক্টকে দ্বিতীয় argument হিসেবে declare করতে হবে।
@@ -337,7 +337,7 @@ function tasksReducer(tasks, action) {
337
337
338
338
উপরের কোডে if/else স্টেটমেন্ট ব্যবহৃত হয়েছে, কিন্তু reducer এর ভিতর [switch স্টেটমেন্ট](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/switch) ব্যাবহার করাটা প্রচলিত। ফলাফল একই থাকবে, কিন্তু switch স্টেটমেন্ট একনজরে পরাটা আরো সহজতর।
339
339
340
-
আমরা ডকুমেন্টেশনের বাকী অংশ জুড়ে এই প্রচলন অনুসারেই চালিয়ে যাবো:
340
+
আমরা ডকুমেন্টেশনের বাকী অংশ জুড়ে এই প্রচলন অনুসারেই চালিয়ে যাবোঃ
341
341
342
342
```js
343
343
functiontasksReducer(tasks, action) {
@@ -383,7 +383,7 @@ function tasksReducer(tasks, action) {
383
383
384
384
যদিও reducer আপনার কম্পোনেন্টের ভিতরে কোডের পরিমাণ কমাতে পারে, কিন্তু reducer নাম দেয়ার পিছনে আসল রহস্য হচ্ছে [`reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) অপারেশন, যেটি আপনি array এর উপর প্রয়োগ করতে পারেন।
385
385
386
-
`reduce()` অপারেশনটি আপনাকে একটি array এর একাধিক ভ্যালুকে "একত্র করে" একটি ভ্যালুতে নিয়ে আনার ক্ষমতা দেয়:
386
+
`reduce()` অপারেশনটি আপনাকে একটি array এর একাধিক ভ্যালুকে "একত্র করে" একটি ভ্যালুতে নিয়ে আনার ক্ষমতা দেয়ঃ
387
387
388
388
```
389
389
const arr = [1, 2, 3, 4, 5];
@@ -392,9 +392,9 @@ const sum = arr.reduce(
392
392
); // 1 + 2 + 3 + 4 + 5
393
393
```
394
394
395
-
`reduce` কে আপনি যে ফাংশনটি পাস করেন তাকে বলা হয় "reducer"। এটা গ্রহণ করে _এখন অবধি রেজাল্ট_ এবং _বর্তমান item,_ তারপর এটা return করে _পরবর্তী রেজাল্ট।_ React reducer ও এর অনুরূপ: গ্রহণ করে _এখন অবধি state_ এবং _action_, এবং return করে _পরবর্তী state।_ এমন করে, সময়ের সাথে সেটি action সমূহকে কে state হিসেবে একত্র করে।
395
+
`reduce` কে আপনি যে ফাংশনটি পাস করেন তাকে বলা হয় "reducer"। এটা গ্রহণ করে _এখন অবধি রেজাল্ট_ এবং _বর্তমান item,_ তারপর এটা return করে _পরবর্তী রেজাল্ট।_ React reducer ও এর অনুরূপঃ গ্রহণ করে _এখন অবধি state_ এবং _action_, এবং return করে _পরবর্তী state।_ এমন করে, সময়ের সাথে সেটি action সমূহকে কে state হিসেবে একত্র করে।
396
396
397
-
এমনকি আপনি `reduce()` মেথডটি দিয়েও একটি `initialState` এবং একটি `actions` এর array থেকে সর্বশেষ state বের করতে পারবেন, তার জন্য মেথডটিকে আপনার reducer ফাংশনটি পাস করতে হবে:
397
+
এমনকি আপনি `reduce()` মেথডটি দিয়েও একটি `initialState` এবং একটি `actions` এর array থেকে সর্বশেষ state বের করতে পারবেন, তার জন্য মেথডটিকে আপনার reducer ফাংশনটি পাস করতে হবেঃ
398
398
399
399
<Sandpack>
400
400
@@ -457,39 +457,39 @@ export default function tasksReducer(tasks, action) {
457
457
458
458
</DeepDive>
459
459
460
-
### ধাপ ৩: আপনার কম্পোনেন্টে reducer টি ব্যাবহার করুন {/*step-3-use-the-reducer-from-your-component*/}
460
+
### ধাপ ৩ঃ আপনার কম্পোনেন্টে reducer টি ব্যাবহার করুন {/*step-3-use-the-reducer-from-your-component*/}
461
461
462
-
সবশেষে, আপনার `tasksReducer` টিকে আপনার কম্পোনেন্টের সাথে সংযুক্ত করে দিতে হবে। React থেকে `useReducer` হুকটি import করুন:
462
+
সবশেষে, আপনার `tasksReducer` টিকে আপনার কম্পোনেন্টের সাথে সংযুক্ত করে দিতে হবে। React থেকে `useReducer` হুকটি import করুনঃ
`useReducer` হুকটি অনেকটা `useState` মতো—আপনার অবশ্যই একে একটি initial state (স্টেটের প্রাথমিক ভ্যালু) পাস করতে হবে আর এটি return করে state এর ভ্যালু এবং state কে সেট করার একটি পদ্ধতি (এক্ষেত্রে, dispatch ফাংশন)। কিন্তু এটি (`useState` থেকে) একটু আলাদা।
481
481
482
-
`useReducer` হুকটি দুটি argument নেয়:
482
+
`useReducer` হুকটি দুটি argument নেয়ঃ
483
483
484
484
1. একটি reducer function
485
485
2. একটি initial state
486
486
487
-
আর এটি return করে:
487
+
আর এটি return করেঃ
488
488
489
489
1. একটি state ভ্যালু
490
490
2. একটি dispatch function (ইউজার actions কে reducer এর নিকট "dispatch বা প্রেরণ" করার জন্য)
491
491
492
-
এখন এটিকে পুরোপুরি সেট আপ করা হয়ে গেছে। এখানে, reducer টিকে component file এর নিচের দিকে declare করা হয়েছে:
492
+
এখন এটিকে পুরোপুরি সেট আপ করা হয়ে গেছে। এখানে, reducer টিকে component file এর নিচের দিকে declare করা হয়েছেঃ
493
493
494
494
<Sandpack>
495
495
@@ -674,7 +674,7 @@ li {
674
674
675
675
</Sandpack>
676
676
677
-
যদি চান, তাহলে আপনি reducer টিকে ভিন্ন আরেকটি ফাইলেও নিতে পারেন:
677
+
যদি চান, তাহলে আপনি reducer টিকে ভিন্ন আরেকটি ফাইলেও নিতে পারেনঃ
678
678
679
679
<Sandpack>
680
680
@@ -874,7 +874,7 @@ Reducer এর যে একদম কোনো খারাপ দিক নে
874
874
-**টেস্ট করা (Testing):** Reducer হলো একটি pure function যা আপনার কম্পোনেন্টের উপর নির্ভর করে না। এর মানে আপনি একে আলাদা ভাবে export করে test করতে পারবেন। যদিও স্বাভাবিকভাবে কম্পোনেন্টস কে আরো realistic environment এ টেস্ট করা উত্তম, তবে জটিল state update logic এর ক্ষেত্রে "নির্দিষ্ট initial state এবং action এর জন্য আপনার reducer নির্দিষ্ট state রিটার্ন করে" এ ব্যাপারে নিশ্চিত থাকা উপকারে আসতে পারে।
875
875
-**ব্যাক্তিগত পছন্দ (Personal preference):** কেউ reducer পছন্দ করে, কেউ করেনা। এটা কোনো সমস্যা না। এটা একটা রুচির বিষয়। আপনি সর্বদাই `useState` এবং `useReducer` এর মাঝে অদল বদল করতে পারবেনঃ তারা উভয়ই সমান!
876
876
877
-
যদি আপনি কোনো কম্পোনেন্টে ভুলভাল স্টেট আপডেটের কারণে bug এর সম্মুখীন হন এবং এর কোডের কাঠামো আরো সুন্দর করতে চান, সেক্ষেত্রে আমরা একটি reducer ব্যাবহার করা রেকমেন্ড করি। আপনার সব কিছুর জন্য reducer ব্যাবহার করতে হবে এমন কোনো কথা নেই: আপনি বিনা বাধায় মিলিয়ে মিশিয়ে ব্যাবহার করতে পারেন! এমনকি আপনি একই কম্পোনেন্টে `useState` এবং `useReducer` ব্যাবহার করতে পারেন।
877
+
যদি আপনি কোনো কম্পোনেন্টে ভুলভাল স্টেট আপডেটের কারণে bug এর সম্মুখীন হন এবং এর কোডের কাঠামো আরো সুন্দর করতে চান, সেক্ষেত্রে আমরা একটি reducer ব্যাবহার করা রেকমেন্ড করি। আপনার সব কিছুর জন্য reducer ব্যাবহার করতে হবে এমন কোনো কথা নেইঃ আপনি বিনা বাধায় মিলিয়ে মিশিয়ে ব্যাবহার করতে পারেন! এমনকি আপনি একই কম্পোনেন্টে `useState` এবং `useReducer` ব্যাবহার করতে পারেন।
@@ -885,7 +885,7 @@ Reducer লেখার সময় এই দুটি টিপস মনে র
885
885
886
886
## Immer দিয়ে সংক্ষেপে reducers লেখা {/*writing-concise-reducers-with-immer*/}
887
887
888
-
স্বাভাবিক স্টেটে [objects](/learn/updating-objects-in-state#write-concise-update-logic-with-immer) এবং [arrays](/learn/updating-arrays-in-state#write-concise-update-logic-with-immer) আপডেট করার মতই, আপনি reducer সমূহকে আরো সংক্ষেপ করতে আপনি Immer লাইব্রেরীটি ব্যাবহার করতে পারেন। এখানে, [`useImmerReducer`](https://github.com/immerjs/use-immer#useimmerreducer) আপনাকে `push` অথবা `arr[i] =` অ্যাসাইনমেন্ট দিয়ে স্টেট আপডেট করতে দিচ্ছে:
888
+
স্বাভাবিক স্টেটে [objects](/learn/updating-objects-in-state#write-concise-update-logic-with-immer) এবং [arrays](/learn/updating-arrays-in-state#write-concise-update-logic-with-immer) আপডেট করার মতই, আপনি reducer সমূহকে আরো সংক্ষেপ করতে আপনি Immer লাইব্রেরীটি ব্যাবহার করতে পারেন। এখানে, [`useImmerReducer`](https://github.com/immerjs/use-immer#useimmerreducer) আপনাকে `push` অথবা `arr[i] =` অ্যাসাইনমেন্ট দিয়ে স্টেট আপডেট করতে দিচ্ছেঃ
889
889
890
890
<Sandpack>
891
891
@@ -1086,7 +1086,7 @@ Reducers কে অবশ্যই pure হতে হবে, যেন সেগ
1086
1086
1087
1087
<Recap>
1088
1088
1089
-
-`useState` কে `useReducer` এ পরিবর্তন করতে:
1089
+
-`useState` কে `useReducer` এ পরিবর্তন করতেঃ
1090
1090
1. ইভেন্ট হ্যান্ডলারসমূহ থেকে actions ডিসপ্যাচ করুন।
1091
1091
2. একটি reducer function যেটি প্রদত্ত স্টেটের জন্য পরবর্তী স্টেট রিটার্ন করে এবং action সমূহ লিখুন।
0 commit comments