2016-06-28 2 views
6

Как получить текущий путь и запрос текущего местоположения с помощью редукционного маршрутизатора в редукторе. Я могу легко получить путь к компоненту с помощью mapStateToProps, но я хочу получить доступ к текущему пути в редукторе. Я использую redux-router 1.0.0-beta7, response-router 1.0.3.Как получить доступ к текущему местоположению в редукторе (редукционный маршрутизатор)?

+0

может быть, вы можете пройти путь в редукторе через действие созидатель? –

+1

Зачем вам дублировать «источник истины» текущего пути? Если вам нужен доступ к текущему пути, просто получите его из 'реквизита', так как' router' автоматически передается. Маршрутизатор является источником истины для определения местоположения маршрута, поэтому нет необходимости дублировать это в сокращении. Если вам нужно услышать это от автора 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'. –