राज्य के आकार को डिजाइन करने के अध्याय में , डॉक्स आपके राज्य को आईडी द्वारा बंद किए गए ऑब्जेक्ट में रखने का सुझाव देते हैं:
प्रत्येक इकाई को एक कुंजी के रूप में एक आईडी के साथ संग्रहीत ऑब्जेक्ट में रखें, और अन्य संस्थाओं या सूचियों से इसे संदर्भित करने के लिए आईडी का उपयोग करें।
वे राज्य करते हैं
डेटाबेस के रूप में ऐप की स्थिति के बारे में सोचें।
मैं फ़िल्टरों की सूची के लिए राज्य के आकार पर काम कर रहा हूं, जिनमें से कुछ खुले होंगे (वे पॉपअप में प्रदर्शित होते हैं), या चयनित विकल्प हैं। जब मैंने "डेटाबेस के रूप में एप्लिकेशन की स्थिति के बारे में सोचा" पढ़ा, तो मैंने उन्हें 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 / से निपटने के लिए कठिन बनाता है। (यही कारण है कि मैं पहली जगह में वस्तुओं की सरणी के साथ गया था।) इसलिए यदि आप उस दृष्टिकोण के साथ जाते हैं, तो क्या आप इसे JSON प्रारूप और राज्य आकार प्रारूप के बीच आगे और पीछे बदलने के लिए फ़ंक्शन का उपयोग करते हैं? वह गुदगुदी लगती है। (हालांकि अगर आप उस दृष्टिकोण की वकालत करते हैं, तो यह आपके तर्क का हिस्सा है कि ऊपर दिए गए एरे के ऑब्जेक्ट्स की तुलना में कम क्लंकी है?)
तथा
3) मुझे पता है कि दान अब्रामोव ने सैद्धांतिक रूप से राज्य-डेटा-संरचना अज्ञेयवादी के रूप में डिज़ाइन किया है (जैसा कि "द्वारा सुझाया गया है) , शीर्ष-स्तरीय राज्य एक ऑब्जेक्ट या मानचित्र की तरह कुछ अन्य कुंजी-मूल्य संग्रह है, लेकिन तकनीकी रूप से यह कोई भी हो सकता है प्रकार , " जोर मेरा)। लेकिन ऊपर दिया गया, क्या यह सिर्फ "अनुशंसित" है, इसे किसी वस्तु को आईडी के पास रखने के लिए, या क्या अन्य अप्रत्याशित दर्द बिंदु हैं जो मैं वस्तुओं की एक सरणी का उपयोग करके चलाने जा रहा हूं जो इसे ऐसा बनाता है कि मुझे बस गर्भपात करना चाहिए योजना और आईडी द्वारा बंद एक वस्तु के साथ छड़ी करने की कोशिश?
sort_by
? const sorted = _.sortBy(collection, 'attribute');