2016-06-28 5 views
6

redux-reducerで現在の場所の現在のパスとクエリを取得するにはどうすればよいでしょうか。私は、mapStateToPropsでコンポーネント内で簡単にパス名を取得することができますが、私は減速機の現在のパスにアクセスしたいです。私はredux-router 1.0.0-beta7、react-router 1.0.3を使用しています。レデューサー(redux-router)の現在位置にアクセスするには?

+0

からのパスのパス名は、多分あなたは、アクションのクリエイターによる減速へのパス名を渡すことができますか? –

+1

現在のパスの「真実の源」をなぜ複製しますか?現在のパスにアクセスする必要がある場合は、 'router 'が自動的に渡されるので' props'から取得してください。ルータは経路の場所の真実の源であり、これをreduxで複製する必要はありません。著者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.pathname'ではなく' ... .router.location.pathname'であることに注意してください。 –

関連する問題