2015-11-19 13 views
15

अद्यतनरेडक्स; जब combineReducers

@Dominic टोबियास के लिए धन्यवाद और @gabdallah के माध्यम से बना reducers उपयोग करते हुए मेरे शर्मनाक गलती खोलना के लिए राज्य के अन्य भागों तक पहुँचने।

सही उत्तर निश्चित रूप से है;

तो action.payload जांचने का प्रयास करें।

स्विच स्टेटमेंट और एक्शन ऑब्जेक्ट के बारे में अन्य टिप्पणियां हम अपने उदाहरण में किए गए त्रुटियों का जिक्र कर रहे हैं, जिन्हें मैंने सही किया है।


कल्पना कीजिए कि मैंने निम्नलिखित दो reducers संयुक्त किया है;

import { combineReducers } from 'redux' 
import { routerStateReducer } from 'redux-router' 
import entries from './entries' 

export default combineReducers({ 
    router: routerStateReducer, 
    entries 
}) 

मैं इस मामले में वैश्विक स्थिति के दूसरे हिस्से के आधार पर प्रविष्टियों की स्थिति को बदलना चाहता हूं; उदाहरण के लिए अंकन को लागू करने के लिए रेडक्स-राउटर द्वारा प्रदान किया गया राउटर राज्य।

मैं ऐसा कुछ कैसे कर सकता हूं?

// entries.js 
import { ROUTER_DID_CHANGE } from 'redux-router/lib/constants' 
const initialState = {} 

function entries (state = initialState, action) { 
    switch (action.type) { 
    case ROUTER_DID_CHANGE: 
     // How can I access `state.router` here in order to do something like this; 
     if (routerState.location.pathname === '/entries') { 
     return { 
      ...state, 
      page: routerState.location.query.page || state.page, 
      limit: routerState.location.query.limit || state.limit 
     } 
     } 
     return state 
    } 
} 

कुछ अन्य दृष्टिकोण जो ध्यान में आते हैं;

  • , Entries मार्ग घटक रूटर राज्य कनेक्ट रूटर राज्य की जाँच करें और पेज और सीमा मान बदले में प्रविष्टियों राज्य परिवर्तनशील साथ एक कार्रवाई निर्माता कॉल करने के लिए componentWillMount जीवन चक्र विधि का उपयोग करें। यह काम करेगा; हालांकि मैं इसे घुमाने से पहले रूट घटक पर स्थिर fetchData विधि को कॉल करने के लिए कुछ संक्रमण मिडलवेयर का उपयोग कर रहा हूं, इसलिए डेटा प्राप्त हो जाता है, फिर पेजिनेशन एक्शन निर्माता को बाद में बुलाया जाएगा; वांछित व्यवहार नहीं।
  • कहीं और राउटर क्रियाओं को सुनें (यानी एक समर्पित राउटर रेडक्स मॉड्यूल), प्रविष्टियों की दुकान पर एक एक्शन निर्माता को कॉल करें, लेकिन मुझे यकीन नहीं है कि यह रेडक्स-राउटर के साथ कितना अच्छा है या मैं राउटर तक कैसे पहुंचूंगा वैश्विक स्टोर का हिस्सा।
  • यह बिल्कुल मत करो; बस स्थिर fetchData विधि

अन्य उपयोगी जानकारी में राउटर स्थिति से पूछें;

प्रश्न में कार्यान्वयन युनिवर्सल ऐप्लिकेशन भारी प्रतिक्रिया-redux-सार्वभौमिक-गर्म उदाहरण

प्रासंगिक deps से प्रेरित है

  • प्रतिक्रिया 0.14.2
  • redux 3.0.3
  • प्रतिक्रिया -उटर 1.0.0-आरसी 3
  • रेडक्स-राउटर 1.0.0-बीटा 3

मैं इस या समान व्यवहार को कैसे प्राप्त कर सकता हूं? क्या मैं इस बारे में भी सही तरीके से सोच रहा हूं?

+1

क्रिया प्रकार का ऑब्जेक्ट और एक वैकल्पिक पेलोड हैं। जैसा कि @ डोमिनिक टोबीस द्वारा उल्लिखित है, आपको कार्रवाई की प्रकार की संपत्ति पर स्विच करना चाहिए और मार्ग को रेड्यूसर में पेलोड के रूप में भेजना चाहिए। –

उत्तर

8

पुराने दिनों पहले चीजों को एक डेवलपर लोगों के लिए आसान हो गया इतिहास वस्तु पर popstate घटना को सुनना में वापस;)

ऐसा लगता है कि आवश्यक जानकारी की तरह कार्रवाई पर है?

history.listen((error, nextRouterState) => { 
... 
store.dispatch(routerDidChange(nextRouterState)); 

और कार्रवाई:

export function routerDidChange(state) { 
    return { 
    type: ROUTER_DID_CHANGE, 
    payload: state 
    }; 
} 

तो action.payload जांच कर देखें।

हालांकि अपने स्विच बयान action.type के बजाय action उपयोग कर रहा है तो वहाँ कुछ गड़बड़ वहाँ चल रहा .. तुम क्या करने की जरूरत नहीं होनी चाहिए action = {} या तो - देख http://redux.js.org/docs/basics/Reducers.html

+2

यह बिल्कुल सही है! –

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