2016-06-28 27 views
6

Jak uzyskać bieżącą ścieżkę i zapytanie o bieżącą lokalizację z redux-router w reduktorze. Jestem w stanie uzyskać ścieżkę łatwo wewnątrz komponentu z mapStateToProps, ale chcę uzyskać dostęp do bieżącej ścieżki w reduktorze. Używam redux-routera 1.0.0-beta7, routera reakcji 1.0.3.Jak uzyskać dostęp do bieżącej lokalizacji w reduktorze (redux-routerze)?

+0

może można przejść ścieżkę do reduktora poprzez działanie twórcza? –

+1

Dlaczego miałbyś duplikować "źródło prawdy" obecnej ścieżki? Jeśli potrzebujesz dostępu do bieżącej ścieżki, po prostu pobierz ją z 'props', ponieważ' router' jest automatycznie przekazywany. Router jest źródłem prawdy dla lokalizacji trasy, nie ma potrzeby duplikowania tego w redux. Jeśli chcesz to usłyszeć od autora Redux, obejrzyj to: https://egghead.io/lessons/javascript-redux-filtering-redux-state-with-react-router-params – lux

+0

tak właśnie działa [redux-router] (https://github.com/acdlite/redux-router#differences-with-react-router-redux) działa –

Odpowiedz

12

.way - przechodzi ścieżki szczególnie działania przez redux-thunk i getstate()

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

.way - zapis pośredniej i przechodzą ścieżki z każdej akcji

///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 - wprost ścieżka z komponentu this.props.location.pathname

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

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

Rozwiązanie middleware jest świetne! Dziękuję za to. Naprawdę zastanawiam się, dlaczego nie mają wtyczki do niego. – Tomer

+0

Zwróć uwagę, że jest to '... .router.location.pathname', a nie' ... .router.pathname'. –

Powiązane problemy