mobx

2016-06-28 10 views
5

में गणना/अवलोकनों का उपयोग कब करें मुझे लगता है कि मुझे अधिकांश मोबक्स मिल रहा है, लेकिन मैं कुछ स्पष्टीकरण देना चाहता हूं। मैं कुछ observables के साथ एक दुकान मिल गया है, मुख्य जिनमें से (टाइपप्रति) वस्तुओं की एक सरणी है:mobx

class ClientStore { 
    constructor() { 
     this.loadClients(); 
    } 

    @observable private _clients: IClient[] = []; 
    @computed get clients() { 
     return this._clients; 
    } 
    @observable isFetching: boolean = false; 
    @observable sortField: 'title' | 'modified' = 'modified'; 
    @observable sortDescending: boolean = true; 

    getClientByUrlName(urlName: string): IClient { 
     return this._clients.find(c => c.urlName === urlName); 
    } 
etc... 

मेरा प्रश्न है पिछले समारोह है कि - getClientByUrlName। चूंकि यह एक अवलोकन करने योग्य है, किसी भी @observer प्रतिक्रिया घटक जो उस फ़ंक्शन का उपयोग कर सही ढंग से पुन: प्रस्तुत करता है। क्या इस तरह के कुछ के लिए यह मूर्खतापूर्ण mobx है? ऐसा लगता है कि यह एक गणना मूल्य होना चाहिए। क्या मुझे उस घटक में एक गणना मूल्य होना चाहिए जो इसका उपयोग करना चाहता है?

//import singletone ClientStore 
class ClientDetailsView extends React.Component<{params:{urlName:string}}, void> { 

    @computed get client() { 
     return ClientSotre.clients.find(c => c.urlName === this.props.params.urlName); 
    } 

...rest of react component 

मैं यहां सर्वोत्तम प्रथाओं और मिलचास की तलाश में हूं। किसी भी मदद की सराहना की है।

* संपादित तय कोड नमूना त्रुटि

उत्तर

7

सिद्धांत रूप में @computed सरल एक निर्देश है कि MobX बताता है: "यह मान observables जाता है कि परिवर्तन का इस्तेमाल किया के किसी भी जब तक संचित किया जा सकता"। इसलिए वास्तव में उन्हें हमेशा छोड़ा जा सकता है, इसका मतलब यह होगा कि आपका ऐप अधिक से अधिक होगा, लेकिन इससे परिणाम नहीं बदलेगा।

तो यदि आप सिद्धांत में सिद्धांत पर @computed खो रहे हैं तो ज्यादातर मामलों में कोई समस्या नहीं है। यदि ऐसा है, तो आप createTransformer का उपयोग कर सकते हैं जो एक-तर्क फ़ंक्शन लेता है और गणना किए गए मानों की एक (स्वयं सफाई) ज्ञापन कैश बनाता है। लेकिन यह थोड़ा और अधिक शामिल है, इसलिए वास्तव में आपके ClientDetailsView में एक गणना की गई संपत्ति पेश करने का आपका समाधान अच्छा है। मैं वास्तव में ऐसा करने की अनुशंसा करता हूं कि जब तक आपके पास उस गणना की गई संपत्ति (घटक जो इस मामले में इसकी आवश्यकता हो) रखने के लिए एक अच्छी जगह है,

+0

आह हा! ऐसा लगता है कि मैं एक टुकड़ा लापता था। हर बार जब मैं दस्तावेज़ों पर जाता हूं तो मुझे एक हिस्सा दिखाई देता है जैसे कि यह बिल्कुल नया था। मजेदार है कि घटक में गणना की गई संपत्ति को चिपकाकर मेरे पास आया क्योंकि मैं सवाल लिख रहा था। [विषय से बाहर] मैं वास्तव में रास्ते में मोबक्स की तरह हूं (मैं रेडक्स से बदल रहा हूं)। जितना अधिक मैं सीखता हूं कि यह मुझे कितना पसंद करता है। सारी कड़ी मेहनत के लिए शुक्रिया! – Jakke

+0

मैंने वास्तव में दस्तावेज़ों को आखिरी दिनों में पुन: व्यवस्थित किया था, ताकि इंप्रेशन सही हो :) – mweststrate

+0

मैं थोड़ा उलझन में हूं कि स्टोर में बजाय क्लाइंटडिस्ट व्यू में '@ गणना' क्यों रखना बेहतर होगा। इसे स्टोर में डालने से वही प्रभाव पड़ता है? – Jeff