从react-router-redux获取当前位置

时间:2016-08-19 15:26:42

标签: reactjs redux react-router react-redux react-router-redux

使用" react-router-redux"后如何获取当前位置?

这是routing州:

{
    routing: {
        locationBeforeTransition: {
            pathname: "/foo",
            search: "",
            hash: "",
            state: null,
            action: "PUSH",
            key: "e8jfk"
        },
        query: null,
        $searchBase: {
            search: "",
            searchBase: ""
        }
    }
}

我可以清楚地访问当前位置state.routing.locationBeforeTransition.pathname,但名称" locationBeforeTransition"好像它将是上一页的位置,而不是当前的位置。这似乎很奇怪,这是我的路由状态中唯一的属性。我怀疑我做错了什么。

这是一个只有路由的简化reducer:

reducer.js

import { combineReducers, createStore, applyMiddleware, compose } from 'redux';
import { routerReducer, routerMiddleware } from 'react-router-redux';
import { browserHistory } from 'react-router';
import thunkMiddleware from 'redux-thunk';

const reducer = combineReducers({ 
  routing: routerReducer, 
});

export const store = createStore(reducer, {}, compose(
    applyMiddleware(
      routerMiddleware(browserHistory), 
      thunkMiddleware
    ),
    window.devToolsExtension ? window.devToolsExtension() : f => f
  )
);

1 个答案:

答案 0 :(得分:4)

你实际上无法从redux商店获得,因为根据How do I access router state in a container component?中的react-router-redux文档:

  

您不应直接从Redux商店读取位置状态。   这是因为React Router异步操作(处理事情   例如动态加载的组件)和组件树可能不会   然后与您的Redux状态同步更新。你应该依靠   React路由器传递的道具,因为它们只有在它之后才会更新   处理了所有异步代码。