2016-03-02 10 views
14

में घटनाओं का नामकरण सम्मेलन रेडक्स राज्य परिवर्तन के लिए कार्यों को प्रेषित करेगा। रेडक्स में एक्शन प्रकारों के सम्मेलन का नामकरण क्या कर रहे हैं?रेडक्स जेएस

उत्तर

17

पूरे समुदाय की कुछ परंपराओं रहे हैं, मैं लोगों को मैं के बारे में पता है और लगता है कि सूचीबद्ध करेंगे यहाँ उपयोगी होते हैं:

  1. सबसे आम सम्मेलन है कार्य प्रकारों ("घटना प्रकार रखने के लिए ") CONSTANT_CASE में।

    यह वर्तनी त्रुटियों, जहां कार्रवाई my_type का एक प्रकार है से बचा जाता है, लेकिन कम करने my-type या My_Type का एक प्रकार की उम्मीद है।

  2. एक और बहुत ही सामान्य सम्मेलन स्थिरांक, उदा के रूप में एक अलग फ़ाइल में कार्य प्रकारों को बचाने के लिए है var MY_ACTION_TYPE = 'MY_ACTION_TYPE';, और वहां से उनका उपयोग करने के लिए।

    यह वर्तनी त्रुटियों से भी बचाता है, इसलिए आप किसी कार्रवाई की MY_ACTION_TYP की अपेक्षा नहीं करते हैं। यदि चर मौजूद नहीं है, तो आपको तुरंत एक त्रुटि मिल जाएगी, खासकर अगर आप लिफ्टिंग कर रहे हैं।

  3. एक काफी के रूप में आम नहीं है, लेकिन imho बहुत उपयोगी, सम्मेलन गुंजाइश एक परियोजना के लिए कार्यों और एक डोमेन है। इस दृष्टिकोण को उनके "Ducks" proposal में Erik Rasmussen द्वारा लोकप्रिय किया गया था, जो निर्दिष्ट करता है कि क्रिया आकार इस आकार में होना चाहिए: var MY_ACTION_TYPE = 'appname/domain/MY_ACTIONTYPE'

    यह एक ही मूल्य वाले दो एक्शन स्थिरांक के मामले से बचाता है। जैसे कल्पना करें कि आपके पास एक एडमिन एरिया और उपयोगकर्ता का सामना करने वाला क्षेत्र है, और दोनों में 'CHANGE_USERNAME' एक्शन टाइप प्रेषित रूप हैं। यह दो reducers एक ही कार्रवाई उठाएगा, जहां किसी को एक दूसरे को नहीं चुनना चाहिए। यह दुर्घटना पर हो सकता है, और ट्रैक करने के लिए बहुत परेशान है। ऐप- और डोमेन नाम के साथ उन्हें उपसर्ग करके, कोई इस समस्या से बचाता है: 'appname/admin/CHANGE_USERNAME''appname/user/CHANGE_USERNAME' से अलग है!

बस इतना ही सम्मेलनों मैं की और उपयोग पता है, लेकिन मुझे यकीन है कि किसी और को भी अधिक है हूँ - क्या आप का इस्तेमाल किया और अपनी परियोजनाओं में उपयोगी पाया है?

+1

पर अधिक पढ़ सकते हैं मुझे लगता है कि scoping कार्य प्रकारों नोट करना चाहें, कर सकते हैं reducer द्वारा ** गलत ** विचार को मजबूत करता है कि [क्रियाएं विशिष्ट reducers के लिए मानचित्र 1: 1] (https://github.com/reduxible/reduxible/issues/8)। हकीकत में, एक ही क्रिया विभिन्न रेड्यूसर द्वारा संसाधित की जा सकती है (और अक्सर), और इसके विपरीत। –

+1

यह सही है, जबकि यह अलग-अलग reducers में एक कार्रवाई लेने से नहीं रखता है, ऐसा लगता है कि ऐसा लगता है। मैं इस बारे में सोचूंगा कि उत्तर को कैसे प्रतिबिंबित करने के लिए इसे संपादित करना है, या क्या आपको शायद कोई विचार हो? संपादित करें: – mxstbr

+4

उत्तर अपडेट किया गया है, मैं इसे 'ऐप/reducername/ACTION_TYPE'' से कुछ ऐप/मॉड्यूलनाम/ACTION_TYPE' या 'ऐप/डोमेन/ACTION_TYPE' से कुछ स्पष्ट करने के लिए इसे साफ़ कर दूंगा और क्रिया निर्माता एक सिंगल से संबंधित हो सकते हैं समूह लेकिन कार्य विशेष reducers से संबंधित नहीं है। –

12

एसिंक्रोनस एक्शन प्रकार नामकरण के आसपास कुछ सम्मेलन भी हैं। आप कार्यों API कॉल का प्रतिनिधित्व करने का एक सेट है, तो उपयोगकर्ता द्वारा प्राप्त करने के लिए, आप उन्हें तरह कुछ में विभाजित कर सकते हैं:

  • FETCH_USER_REQUEST - जब के लिए - जब आप पहली बार API कॉल
  • FETCH_USER_SUCCESS भेजने के लिए API कॉल किया जाता है और सफलतापूर्वक दिए गए डेटा
  • FETCH_USER_FAIL - जब API कॉल विफल हुई और एक त्रुटि बताई लिए,
  • FETCH_USER_COMPLETE - कभी कभी स्थिति की परवाह किए बिना कॉल के अंत
पर इस्तेमाल किया
1

एक नया पैटर्न है जो इसे संबोधित करता है, redux-auto

यह एक कदम आगे reducer संरचना के विचार लेता है। जहां एक फ़ाइल रखने की बजाय आपके reducer का प्रतिनिधित्व करता है और व्यक्तिगत कार्यों के कार्यों का निर्माण।

redux-ऑटो के दृष्टिकोण वैसे भी आपके एप्लिकेशन में आप लिख सकते हैं से अब राज्य पर प्रत्येक कार्य/परिवर्तन का प्रतिनिधित्व करने और गतिशील

उदाहरण

└── store/ 
    ├──user/ 
    │ └── index.js 
    │ └── changeName.js 
    └──posts/ 
     └── index.js 
     └── delete.js 

कार्यों के रूप में यह उजागर व्यक्ति जे एस फ़ाइलों के साथ फ़ोल्डरों के लिए

import actions from 'redux-auto' 
... 
actions.user.changeName({name:"bob"}) 

दुकान/उपयोगकर्ता/changeName.js

export default function (user, payload) { 
    return Object.assign({},user,{ name : payload.name }); 
} 

Thats है!

यदि आप तीसरे पक्ष के reducers में redux कार्यों के लिए सुनना चाहते हैं। आप फ़ंक्शन के खिलाफ ढीली गुणवत्ता जांच के रूप में उपयोग कर सकते हैं।

action.type == actions.user.changeName // "USER/CHANGENAME" 

अधिक उन्नत आप भले ही एक कार्रवाई एक विशिष्ट कम करने के स्वामित्व में है देख सकते हैं कुछ के लिए

// Returns true if it's an action specifically for user 
if(action.type in actions.user) 

आप project page