react.js - React router钩子函数nextState,replace,cb报错

查看:131
本文介绍了react.js - React router钩子函数nextState,replace,cb报错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

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

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>
    );
};

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

解决方案

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

React Router V4 中文文档

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

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

这篇关于react.js - React router钩子函数nextState,replace,cb报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆