রাজ্য আকৃতি ডিজাইনিংয়ের অধ্যায়ে , ডক্সগুলি আপনার রাজ্যটিকে আইডি দ্বারা কীডযুক্ত কোনও বস্তুর মধ্যে রাখার পরামর্শ দেয়:
আইডি সহ সঞ্চিত কোনও সামগ্রীতে প্রতিটি সত্ত্বাকে কী হিসাবে রাখুন এবং আইডিগুলি অন্য সত্তা বা তালিকা থেকে রেফারেন্স করতে ব্যবহার করুন।
তারা রাষ্ট্র যেতে
অ্যাপ্লিকেশনটির অবস্থাটিকে একটি ডাটাবেস হিসাবে ভাবেন।
আমি ফিল্টারগুলির তালিকার জন্য রাজ্য আকারে কাজ করছি, যার কয়েকটি খোলা থাকবে (সেগুলি একটি পপআপে প্রদর্শিত হবে), বা বিকল্পগুলি নির্বাচন করেছে। যখন আমি "অ্যাপ্লিকেশনটির অবস্থাটিকে একটি ডাটাবেস হিসাবে ভাবুন" পড়ি, তখন আমি এগুলিকে একটি JSON প্রতিক্রিয়া হিসাবে ভাবার কথা ভেবেছিলাম কারণ এটি কোনও এপিআই থেকে ফিরে আসবে (নিজেই একটি ডাটাবেস দ্বারা সমর্থিত)।
সুতরাং আমি এটি হিসাবে চিন্তা ছিল
[{
id: '1',
name: 'View',
open: false,
options: ['10', '11', '12', '13'],
selectedOption: ['10'],
parent: null,
},
{
id: '10',
name: 'Time & Fees',
open: false,
options: ['20', '21', '22', '23', '24'],
selectedOption: null,
parent: '1',
}]
তবে দস্তাবেজগুলি আরও পছন্দ মতো একটি বিন্যাসের পরামর্শ দেয়
{
1: {
name: 'View',
open: false,
options: ['10', '11', '12', '13'],
selectedOption: ['10'],
parent: null,
},
10: {
name: 'Time & Fees',
open: false,
options: ['20', '21', '22', '23', '24'],
selectedOption: null,
parent: '1',
}
}
তাত্ত্বিকভাবে, যতক্ষণ না তথ্য সিরিয়ালযোগ্য (তত্ক্ষণাত "রাজ্য" শিরোনামে) থাকে ততক্ষণ তা বিবেচনা করা উচিত নয় ।
সুতরাং আমি আমার অ্যারেটারটি লেখার আগে পর্যন্ত আমি আনন্দের সাথে অ্যারে-অবজেক্টগুলির সাথে চলেছি।
অবজেক্ট-কীড-বাই-আইডি পদ্ধতির সাথে (এবং স্প্রেড সিনট্যাক্সের উদার ব্যবহার), OPEN_FILTER
রিডুসারটির অংশটি হয়ে যায়
switch (action.type) {
case OPEN_FILTER: {
return { ...state, { ...state[action.id], open: true } }
}
অ্যারে-অফ-অবজেক্টের পদ্ধতির সাথে, এটি আরও ভার্বোজ (এবং সহায়ক ফাংশন নির্ভর করে)
switch (action.type) {
case OPEN_FILTER: {
// relies on getFilterById helper function
const filter = getFilterById(state, action.id);
const index = state.indexOf(filter);
return state
.slice(0, index)
.concat([{ ...filter, open: true }])
.concat(state.slice(index + 1));
}
...
সুতরাং আমার প্রশ্নগুলি তিনগুণ:
1) রিডিউসারটির সরলতা কি অবজেক্ট-কীড-বাই-আইডি পদ্ধতির সাথে যাওয়ার প্রেরণা? রাষ্ট্রীয় আকারের অন্যান্য সুবিধা কি আছে?
এবং
2) দেখে মনে হচ্ছে অবজেক্ট-কীড-বাই-আইডি পদ্ধতির কারণে কোনও এপিআই-র জন্য স্ট্যান্ডার্ড জেএসওনকে ইন / আউট মোকাবেলা করা আরও শক্ত হয়ে যায়। (এই কারণেই আমি প্রথম স্থানে বস্তুর অ্যারে নিয়ে গিয়েছিলাম)) সুতরাং আপনি যদি সেই পদ্ধতির সাথে যান তবে আপনি কেবল JSON ফর্ম্যাট এবং রাষ্ট্রীয় আকারের ফর্ম্যাটটির মধ্যে পিছনে পিছনে রূপান্তর করতে কোনও ফাংশন ব্যবহার করেন? মনে হচ্ছে আড়ষ্ট। (যদিও আপনি যদি এই পদ্ধতির পক্ষে হন তবে আপনার যুক্তির একটি অংশ কি এটি উপরের অ্যারে-অবজেক্ট রিডুসারের চেয়ে কম ছোঁয়াচে?)
এবং
3) আমি জানি যে ড্যান আব্রামভ তাত্ত্বিকভাবে স্টেট-ডেটা-কাঠামো অজন্যস্টিক হিসাবে রডুএক্স ডিজাইন করেছিলেন ( "কনভেনশন অনুসারে, শীর্ষ-স্তরের রাজ্য একটি মানচিত্রের মতো কোনও বস্তু বা অন্য কোনও মূল-মান সংগ্রহ, তবে প্রযুক্তিগতভাবে এটি কোনও হতে পারে টাইপ করুন , " জোর দেওয়া খনি)। তবে উপরের দিক দিয়ে দেওয়া হয়েছে, আইডি দ্বারা কীড করা বিষয়টিকে ঠিক রাখার জন্য কি "প্রস্তাবিত" বা অন্য কোনও অপ্রত্যাশিত ব্যথা পয়েন্ট রয়েছে যা আমি অবজেক্টগুলির একটি অ্যারে ব্যবহার করে চালিয়ে যাচ্ছি যাতে এটি এমন হয় যে আমার কেবল গর্ভপাত হওয়া উচিত? পরিকল্পনা করুন এবং আইডি দ্বারা keyed একটি বস্তুর সাথে থাকা চেষ্টা?