react.js - React router钩子函数nextState,replace,cb报错
本文介绍了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 和组件。
找了好多资料也都是这么写的
可能你找的资料和你使用的版本不一致,看一下 package.json 文件的 ReactRouter 版本信息。
这篇关于react.js - React router钩子函数nextState,replace,cb报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文