यदि आप अपने ऐप में कार्यों की श्रृंखला को एक सूची की तरह मानते हैं, या शायद एक स्ट्रीम की तरह, तो यह अधिक समझ में आता है।
इसका उदाहरण लें:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
पहला तर्क फॉर्म का एक फ़ंक्शन है (Int, String) => Int
। एक प्रारंभिक मूल्य के साथ, आप पास reduce
करते हैं जिसे "रेड्यूसर फ़ंक्शन" कहा जा सकता है, और आपको आइटमों की श्रृंखला के प्रसंस्करण का परिणाम मिलता है। तो आप कह सकते हैं, रिड्यूसर फ़ंक्शन वर्णन करता है कि परिणाम बदलने के लिए प्रत्येक क्रमिक व्यक्तिगत आइटम के साथ क्या किया जाता है। दूसरे शब्दों में, reducer फ़ंक्शन पूर्व आउटपुट और अगला मान लेता है, और यह अगले आउटपुट की गणना करता है।
यह एक Redux reducer क्या करता है के अनुरूप है: यह पिछली स्थिति और वर्तमान कार्रवाई लेता है, और यह अगले राज्य की गणना करता है।
वास्तविक कार्यात्मक प्रोग्रामिंग शैली में, आप तर्क और परिणाम पर लागू अर्थ को वैचारिक रूप से मिटा सकते हैं, और केवल इनपुट और आउटपुट के "आकार" पर ध्यान केंद्रित कर सकते हैं।
व्यवहार में, Redux reducers आम तौर पर ऑर्थोगोनल होते हैं, इस अर्थ में कि किसी दिए गए कार्य के लिए, वे सभी समान गुणों में परिवर्तन नहीं करते हैं, जिससे उनकी ज़िम्मेदारियों को विभाजित करना और आउटपुट को एकत्र करना आसान हो जाता है combineReducers
।
reduce
, जिसमें डिफ़ॉल्ट मान और दूसरे मूल्य तक पहुंच होती है, और आपको अपने संभावित रूप से परिवर्तित डिफ़ॉल्ट मान को वापस देता है।state -> action -> state