Как получить текущий путь и запрос текущего местоположения с помощью редукционного маршрутизатора в редукторе. Я могу легко получить путь к компоненту с помощью mapStateToProps, но я хочу получить доступ к текущему пути в редукторе. Я использую redux-router 1.0.0-beta7, response-router 1.0.3.Как получить доступ к текущему местоположению в редукторе (редукционный маршрутизатор)?
ответ
.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
Средство промежуточного программного обеспечения отлично! Спасибо за это. Мне действительно интересно, почему у них нет плагина. – Tomer
Обратите внимание, что это '... .router.location.pathname', а не' ... .router.pathname'. –
может быть, вы можете пройти путь в редукторе через действие созидатель? –
Зачем вам дублировать «источник истины» текущего пути? Если вам нужен доступ к текущему пути, просто получите его из 'реквизита', так как' router' автоматически передается. Маршрутизатор является источником истины для определения местоположения маршрута, поэтому нет необходимости дублировать это в сокращении. Если вам нужно услышать это от автора Redux, посмотрите это: https://egghead.io/lessons/javascript-redux-filtering-redux-state-with-react-router-params – lux
вот как [redux-router] (https://github.com/acdlite/redux-router#differences-with-react-router-redux) работает –