react-router-redux 无法推送新的 URL

react-router-redux cannot push new URL

我正在尝试在发生错误时在 redux 操作中重定向。我已经尝试设置 react-router-redux 但出现以下错误。

Uncaught TypeError: Cannot read property 'push' of undefined
    at middleware.js:29
    at index.js:14
    at index.js:100
    at dispatch (applyMiddleware.js:45)
    at reports-actions.js:88
    at index.js:11
    at Object.dispatch (index.js:100)
    at ReportTemplate.componentWillMount (ReportTemplate.js:54)
    at ReactCompositeComponent.js:348
    at measureLifeCyclePerf (ReactCompositeComponent.js:75)

这是路由器和 redux 的设置方式。

const reducers = combineReducers({
    customer: transactionTrackerCustomerReducer,
    hierarchy: transactionTrackerHierarchyReducer,
    item: transactionTrackerItemReducer,
    tender: transactionTrackerTenderReducer,
    transaction: transactionTrackerTransactionReducer,
    transactionTracker: transactionTrackerReducer,
    session: userSessionReducer,
    reports: reportsReducer
});
const middleware = applyMiddleware(createLogger(), thunk, routerMiddleware(hashHistory));
const store = createStore(reducers, compose(middleware));
ReactDOM.render(
    <Provider store={store}>
        <Router history={hashHistory}>
            <MuiThemeProvider muiTheme={getBrandTheme()}>
                <Switch>
                    <Route path="/login" component={Login}/>
                    <Route path="/" render={props => (<App/>)}/>
                </Switch>
            </MuiThemeProvider>
        </Router>
    </Provider>
    , document.getElementById('root')
);

我正在尝试这样使用它

export function fetchStoreHierarchy() {

    return function (dispatch) {

        // other code ....
        dispatch(push('/login'));
     }
}

你收到错误是因为没有定义推送方法......尝试像这样调用 routeActions.push('/login')......

import { routeActions } from 'react-router-redux';
dispatch(routeActions.push('/login'));

react-router-redux版本4开始,你必须导入routerActions,如下:

import { routerActions } from 'react-router-redux'

并调用它的 push 函数,如:

return function (dispatch) {
    // other code ....
    dispatch(routerActions.push('/login'));
}