2016-06-28 36 views
6

Come ottengo il percorso corrente e la query della posizione corrente con redux-router in riduttore. Sono in grado di ottenere facilmente il pathname all'interno del componente con mapStateToProps, ma voglio accedere al percorso corrente in reducer. Sto usando redux-router 1.0.0-beta7, react-router 1.0.3.Come accedere alla posizione corrente nel riduttore (redux-router)?

+0

forse si può passare path in riduttore attraverso l'azione Creater? –

+1

Perché dovresti duplicare la "fonte della verità" del percorso attuale? Se hai bisogno di accedere al percorso corrente, basta prenderlo da "oggetti di scena" poiché "router" viene automaticamente passato. Il router è la fonte della verità per la posizione del percorso, non è necessario duplicare questo in modo riduttivo. Se hai bisogno di ascoltarlo dall'autore Redux, guarda questo: https://egghead.io/lessons/javascript-redux-filtering-redux-state-with-react-router-params – lux

+0

ecco come [redux-router] (https://github.com/acdlite/redux-router#differences-with-react-router-redux) funziona –

risposta

12

.way - pass percorso con particolare azione attraverso redux-thunk e getState()

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

.way - scrivere middleware e passare percorso con ogni azione

///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 - pass percorso da this.props.location.pathname del componente

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

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

La soluzione middleware è fantastica! Grazie per quello. Mi chiedo davvero perché non hanno un plugin per questo. – Tomer

+0

Si noti che '... .router.location.pathname', non' ... .router.pathname'. –

Problemi correlati