2016-06-28 10 views
6

मैं रेड्यूसर में रेडक्स-राउटर के साथ वर्तमान स्थान का वर्तमान पथ और क्वेरी कैसे प्राप्त करूं। मैं mapStateToProps के साथ घटक के अंदर आसानी से पथनाम प्राप्त करने में सक्षम हूं, लेकिन मैं रेड्यूसर में वर्तमान पथ तक पहुंच बनाना चाहता हूं। मैं रेडक्स-राउटर 1.0.0-बीटा 7, प्रतिक्रिया-राउटर 1.0.3 का उपयोग कर रहा हूं।रेड्यूसर (रेडक्स-राउटर) में वर्तमान स्थान का उपयोग कैसे करें?

+0

से पारित पथ नाम हो सकता है आप पथ कम करने में कार्रवाई creater के माध्यम से पारित कर सकते हैं? –

+1

आप वर्तमान पथ के "सत्य के स्रोत" को डुप्लिकेट क्यों करेंगे? यदि आपको वर्तमान पथ तक पहुंच की आवश्यकता है, तो इसे 'प्रोटर' से प्राप्त करें क्योंकि 'राउटर' स्वचालित रूप से पारित हो जाता है। मार्ग स्थान के लिए राउटर सत्य का स्रोत है, इसे Redux में डुप्लिकेट करने की आवश्यकता नहीं है। यदि आपको इसे लेखक रेडक्स से सुनना है, तो इसे देखें: https://egghead.io/lessons/javascript-redux-filtering-redux-state-with-react-router-params – lux

+0

इस प्रकार [redux-router] (https://github.com/acdlite/redux-router#differences-with-react-router-redux) –

उत्तर

12

.way - के माध्यम से redux-thunk और getState() विशेष कार्रवाई साथ पथ नाम पारित

const someAction = data =>(dispatch,getState)=>{ 
    dispatch({ 
     type:'SOME_ACTION', 
     pathname:getState().router.pathname 
    }) 
} 

.way - मिडलवेयर लिख सकते हैं और हर कार्रवाई के साथ पथ नाम पारित

///write middleware 
export const attachPathNameToAction = store => next => action=>{ 
    action.pathname = store.getState().router.pathname //<-----passing pathname 
    next(action) 
}; 


///then in reducer you allways can get pathname 
case 'SOME_ACTION': 
    let pathname = action.pathname \\ <------------- 
    return {...state, action.data} 

.way - घटक के this.props.location.pathname

//in component 
let {pathname}= this.props.location; 
this.props.someAction(data, pathname); 

//workflow: component -> action -> reducer 
+2

काम करता है मिडलवेयर समाधान बहुत अच्छा है! उसके लिए धन्यवाद। मुझे सच में आश्चर्य है कि उनके पास प्लगइन क्यों नहीं है। – Tomer

+0

ध्यान दें कि यह '... .router.location.pathname' है, नहीं ... ...router.pathname'। –

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