現在公司的后臺系統(tǒng)使用螞蟻金服的dva.js,基于react+redux的封裝,使用的是dva-cli,現在要做登錄認證。
react-router-dom中好像沒有類似vue中的beforeEach鉤子函數,可以攔截路由。
import React from 'react';
import { Router, Route, Switch, Redirect } from 'dva/router';
import routerList from './common/routerList';
import Error404 from './routes/Error/Error404';
export default function RouterConfig({ history, app }) {
const token = app._store.getState().user.token;
console.log('router get token: ', token);
const Routers = routerList.map((item, index) => {
return <Route key={index} path={item.path} exact render={(props) => {
if (item.noAuth) { // 如果是不用登錄就可訪問的頁面,直接返回
return <item.component {...props} />;
} else {
if (token) {
return <item.component {...props} />;
} else {
return <Redirect to={{
pathname: '/login',
state: {from: props.location} }} />
}
}
}} />
});
return (
<Router history={history}>
<Switch>
{Routers}
<Route path="/" exact render={() => (
<Redirect to="/article/mylist" />
)} />
<Route component={Error404} />
</Switch>
</Router>
);
}
這是我做的路由攔截,但是只有在第一次進入頁面,或者頁面刷新后才會有效果,應該怎么改呢
然后登錄的時候,使用this.props.history.push()或者this.props.history.replace()也不能跳轉到首頁
this.props.dispatch({
type: 'user/saveUserInfo',
payload: { userId, nickName, headImageUrl, userName }
});
this.props.dispatch({
type: 'user/saveToken',
payload: token
});
let RedirectUrl = this.props.location.state ? this.props.location.state.from.pathname : '/';
console.log(RedirectUrl);
this.props.history.replace(RedirectUrl);react-router4+在官方教程中給出了一個登錄認證的范例。
類似于vue的鉤子函數是沒有的,因為沒有靜態(tài)路由配置表的概念。主要思想還是通過認證組件包裹你的那些涉及到認證信息的頁面組件,在認證組件中實現登錄重定向/被包裹組件渲染的邏輯。
不要用vue的思維去做react。react是數據驅動的。一切皆數據。dva對于路由的監(jiān)聽,可以放到model的subscriptions中。
給你一個我們項目的initial project。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數據專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產業(yè)為響應國家深化產教融合/校企合作的政策,積極推進“中國制造2025”,實現中華民族偉大復興的升級產業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯(lián)網管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網頁制作和網頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。