2016-06-28 60 views
6

我將如何獲得當前路徑和redux路由器在reducer當前位置的查詢。我能夠通過mapStateToProps輕鬆獲取組件內的路徑名,但我想訪問reducer中的當前路徑。我使用的是redux-router 1.0.0-beta7,react-router 1.0.3。如何訪問reducer(redux-router)中的當前位置?

+0

通路徑也許你可以通過行動創世傳遞路徑進入減速? –

+1

爲什麼要複製當前路徑的「真相源」?如果您需要訪問當前路徑,只需從'props'中獲取它,因爲'router'會自動傳遞。路由器是路由位置的真實來源,不需要在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.location.pathname',而不是'... .router.pathname'。 –