मैं सोच रहा हूं, कभी-कभी मेरे पास एक reducer है जिसके लिए एक और reducer से जानकारी की जरूरत है। क्योंकि अन्यथा मैं सूचकांक सही ढंग से निर्धारित नहीं कर सकता,रेडक्स: एक reducer फ़ंक्शन में store.getState() को कॉल करना, क्या एक विरोधी पैटर्न है?
import * as ActionTypes from '../actions/action_type_constants';
import KeyCode from 'keycode.js/index';
import {store} from "../index";
import {mod} from "../pure_functions";
export function selectedCompletion(state = 0, action) {
if (action.type === ActionTypes.arrowKeyPressed) {
const completionsLength = store.getState().completions.data.length;
if (action.keyCode === KeyCode.UP) {
return mod(state - 1, completionsLength);
} else if (action.keyCode === KeyCode.DOWN) {
return mod(state + 1, completionsLength);
}
}
return state;
}
मैं समारोह की दूसरी पंक्ति में store.getState फोन करते हैं: उदाहरण के लिए मैं इस कम करने की है।
मैं शायद यह और अन्य reducer refactor सकता है, ताकि यह एक बड़ा reducer हो, लेकिन पठनीयता के लिए मैं इस विकल्प को पसंद करेंगे।
मुझे यकीन नहीं है कि अगर मैं कॉलर स्टोर.getState() को एक reducer में कॉल करने के इस पैटर्न का उपयोग करता हूं तो मुझे कोई समस्या नहीं होगी।
मैं यहां थोड़ा उलझन में हूं, कैसे एक स्टेटस्टेट वर्तमान स्थिति के आधार पर उल्लंघन का उल्लंघन करता है? विशेष रूप से एक तृतीय पक्ष reducer के उपयोग मामले दिया है कि आप पुनर्व्यवस्थित नहीं कर सकते हैं। –
सबसे पहले, "शुद्ध कार्य" की परिभाषा "एक ऐसा कार्य है जो केवल इसके इनपुट पर निर्भर करता है, और स्वयं के बाहर कुछ भी संशोधित या प्रभावित नहीं करता है"। एक आयातित स्टोर का संदर्भ देना मतलब है कि यह _not_ शुद्ध है। दूसरा, यह जोड़ उस विशिष्ट स्टोर इंस्टेंस के लिए reducer, जिसका मतलब है कि यह परीक्षण या एकाधिक स्टोर जैसे मामलों में काम नहीं करेगा। इसलिए, अधिकांश मामलों में कोड _may_ काम करता है, लेकिन यह निश्चित रूप से "सही" नहीं है। चीज़ों को संभालने के तरीके के बारे में जानकारी के लिए कृपया उस एफएक्यू एंट्री और [स्ट्रक्चरिंग रेड्यूसर] (http://redux.js.org/docs/recipes/StructuringReducers.html) को दोबारा पढ़ें। – markerikson