2016-06-28 13 views
6

Wie würde ich den aktuellen Pfad und die Abfrage des aktuellen Standortes mit Redux-Router in Reducer bekommen. Ich bin in der Lage, den Pfadnamen leicht innerhalb der Komponente mit mapStateToProps zu erhalten, aber ich möchte auf den aktuellen Pfad in Reducer zugreifen. Ich verwende redux-router 1.0.0-beta7, react-router 1.0.3.Zugriff auf den aktuellen Standort im Reducer (Redux-Router)?

+0

vielleicht können Sie Pfad in Minderer durch Aktion creater passieren? –

+1

Warum sollten Sie die "Quelle der Wahrheit" des aktuellen Pfads duplizieren? Wenn Sie Zugriff auf den aktuellen Pfad benötigen, holen Sie ihn einfach von "Requisiten", da "Router" automatisch übergeben wird. Router ist die Quelle der Wahrheit für die Routenposition, es ist nicht notwendig, dies in redux zu duplizieren. Wenn Sie es vom Autor Redux hören müssen, sehen Sie sich das an: https://egghead.io/lessons/javascript-redux-filtering-redux-state-with-react-router-params – lux

+0

So funktioniert [redux-router] (https://github.com/acdlite/redux-router#differences-with-react-router-redux) funktioniert –

Antwort

12

.way - pass Pfadnamen besonders Aktion durch redux-thunk und getState()

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

.way - Middleware schreiben und Pfadnamen mit jeder Aktion passieren

///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 Pfadname aus Komponente this.props.location.pathname

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

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

Die Middleware-Lösung ist großartig! Dank dafür. Ich frage mich wirklich, warum sie kein Plugin dafür haben. – Tomer

+0

Beachten Sie, dass es '... .router.location.pathname' ist, nicht' ... .router.pathname'. –

Verwandte Themen