React router钩子函数nextState,replace,cb报错

前端页面需要进行身份验证,如果验证不通过则需要跳转到登录页,并且在登录页不需要验证身份信息。

但是还有等写到如何获取当前路由,则就出现了这个问题:

clipboard.png

replace is not a function

代码如下:

import React from 'react';
import { Route, IndexRoute,browserHistory } from 'react-router';
import { Main,AdminMain,AdminLogin} from './containers';
import {loadAuthIfNeeded} from './actions/admin/auth'

const preload = promise => (nextState, replace, cb) => {
    if (__SERVER__ || nextState.location.action === 'PUSH') {
        promise().then(() => cb());
    } else {
        cb();
    }
};

export default store => {
    const authPromise = () => store.dispatch(loadAuthIfNeeded());
    const requireLogin = (nextState, replace, cb) => {
        const user = store.getState().async.user;
        if (!user) {
            replace('/admin/login')
        }
        cb();
    };
    return (
        <Route path="/" component={Main} onEnter={preload(authPromise)}>
            <Route path="admin" component={AdminMain} onEnter={preload(requireLogin())}>
                <Route path="login" component={AdminLogin}/>
            </Route>
        </Route>
    );
};

请问,这个是什么问题呢,找了好多资料也都是这么写的

阅读 5k
1 个回答

确认一下是不是版本问题,React Router v4 已经彻底重写了 API 和组件。

React Router V4 中文文档

找了好多资料也都是这么写的

可能你找的资料和你使用的版本不一致,看一下 package.json 文件的 ReactRouter 版本信息。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题