2017-03-14 27 views
7

मेरा प्रश्न ngrx प्रभाव और reducers से संबंधित है।मुझे एनजीएक्स स्टोर के लिए डेटा को बदलने के उद्देश्य से व्यावसायिक तर्क कहां रखना चाहिए: प्रभाव या reducers में?

मुझे इसे ngrx store में रखने से पहले बैकएंड से पुनर्प्राप्त डेटा को बदलने की आवश्यकता है।

Map<string, Message[]> 

असल में मैं कर रहा हूँ:

Message[] 

मैं निम्नलिखित में सरणी को बदलने की जरूरत है: डेटा बैकएंड से लिया गया Message का एक सादा सरणी (Message अपने आवेदन में एक कस्टम प्रकार है) है काउंटरपार्टी (प्राप्तकर्ता या प्रेषक) आईडी (कुंजी) द्वारा उपयोगकर्ता के संदेशों को समूहीकृत करना।

मैं कहाँ Message[]Map<string, Message[]> करने से परिवर्तन प्रदर्शन करने के लिए यकीन नहीं है: मैं @Effect में या कम करने समारोह में परिवर्तन व्यापार तर्क रखना चाहिए?

उत्तर

4

परिवर्तन या तो प्रभाव या reducer में जा सकता है।

यदि कोई सत्यापन किया जाना आवश्यक था, तो मैं इसे प्रभाव में डालूंगा - जहां मेरे पास एक त्रुटि कार्रवाई प्रेषण का विकल्प होगा।

अन्यथा, मैं इसे reducer में डाल दूंगा, क्योंकि वहीं मैं आमतौर पर राज्य में एक्शन पेलोड को बदल रहा हूं।

एक और विकल्प भी है: आप एक चयनकर्ता का उपयोग कर सकते हैं। यही है, संदेशों को राज्य में एक साधारण सरणी के रूप में संग्रहीत किया जा सकता है और चयनकर्ता का उपयोग राज्य के संदेशों को बदलने, प्रतिपक्ष द्वारा समूहीकृत करने के लिए किया जा सकता है - या जो भी हो। अगर मेरे पास संदेशों को समूहबद्ध करने के कई तरीके थे, तो यह वह विकल्प है जिसे मैं चुनूंगा।

@ngrx/example-appselectors के कुछ उदाहरण दिए गए हैं:

/** 
* A selector function is a map function factory. We pass it parameters and it 
* returns a function that maps from the larger state tree into a smaller 
* piece of state. This selector simply selects the `books` state. 
* 
* Selectors are used with the `select` operator. 
* 
* ```ts 
* class MyComponent { 
* constructor(state$: Observable<State>) { 
* this.booksState$ = state$.select(getBooksState); 
* } 
* } 
* ``` 
*/ 
export const getBooksState = (state: State) => state.books 
+0

धन्यवाद। यह स्पष्ट बनाता है। – balteo

+0

एक और विकल्प जोड़ा गया: एक चयनकर्ता। – cartant

3

तरह से मैं इसे लाने और सिर्फ पुराने दिनों में की तरह एक सेवा में डेटा को बदलने के लिए है।

प्रभाव किसी कार्रवाई पर प्रतिक्रिया करते हैं और डेटा को वापस पाने और प्राप्त होने वाले प्रतिक्रियाओं के आधार पर अन्य कार्रवाइयों को प्रेषित करने के लिए सेवा के माध्यम से कॉल करते हैं।

यह परीक्षण को अधिक आसान बनाता है क्योंकि सेवा को उस प्रभाव से अलग रखा जाता है जिसका मुख्य उद्देश्य एक निश्चित कार्रवाई पर प्रतिक्रिया करना है, पैकेजिंग डेटा नहीं।

प्रसारण इस के लिए इस्तेमाल किया जा सकता है, लेकिन फिर आप इसे पठनीयता प्रयोजनों के लिए साफ रखना चाहिए

0

मेरे राय: बैकएंड से लिया गया

  1. डाटा स्टोर में अपरिवर्तित रखा जाएगा।

  2. गूंगा घटकों के लिए चयनकर्ताओं को अपने व्यावसायिक तर्क (गठबंधन, परिवर्तन और आदि) के रूप में उपयोग करना।

  3. शायद डेटा का फ्लैट करने के लिए सामान्य परिवर्तन का उपयोग करना एकमात्र परिवर्तन है।

संबंधित मुद्दे