#首页 src/index.jsjava
import '@babel/polyfill'; import 'url-polyfill'; import dva from 'dva'; //import createHistory from 'history/createHashHistory'; // user BrowserHistory import createHistory from 'history/createBrowserHistory'; import createLoading from 'dva-loading'; import 'moment/locale/zh-cn'; import './rollbar'; import './index.less'; // 1. Initialize dva初始化 const app = dva({ history: createHistory(), }); // 2. Plugins 加载插件 app.use(createLoading()); // 3. Register global model 注册全集model app.model(require('./models/global').default); // 4. Router 加载路由 app.router(require('./router').default); // 5. Start app.start('#root'); export default app._store; // eslint-disable-line
就是以上5步成就了首页 引用createHistory 能够实现相似java restfull 风格api 同样的路径访问react
引用路由 src/router.jswebpack
import React from 'react'; import { routerRedux, Route, Switch } from 'dva/router'; import { LocaleProvider, Spin } from 'antd'; import zhCN from 'antd/lib/locale-provider/zh_CN'; import dynamic from 'dva/dynamic'; import { getRouterData } from './common/router'; import Authorized from './utils/Authorized'; import styles from './index.less'; //const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />; const { ConnectedRouter } = routerRedux; const { AuthorizedRoute } = Authorized; dynamic.setDefaultLoadingComponent(() => { return <Spin size="large" className={styles.globalSpin} />; }); function RouterConfig({ history, app }) { const routerData = getRouterData(app); const UserLayout = routerData['/user'].component; const BasicLayout = routerData['/'].component; return ( <LocaleProvider locale={zhCN}> <ConnectedRouter history={history}> <Switch> <Route path="/user" component={UserLayout} /> <AuthorizedRoutea path="/" authority={['admin', 'user']} render={props => <BasicLayout {...props} />} redirectPath="/user/login" /> </Switch> </ConnectedRouter> </LocaleProvider> ); } export default RouterConfig;
里面用到了AuthorizedRoutea 和 authority,目前笔者比较笨,还没研究透,大意是权限控制,感受和spring 的secrity 差很少,在这个项目当中主要用了web
这里还用到了 加载动画,可是也没找到怎么替换,后续补充更新spring
// use localStorage to store the authority info, which might be sent from server in actual project. export function getAuthority() { const exp =30000; /* const curTime = new Date().getTime(); const key = localStorage.getItem('antd-pro-authority'); if(key){ if(isJSON(key)){ const dataObj = JSON.parse(key); if (curTime - dataObj.time > exp){ return "guest" } return dataObj.data; }else{ return "18888888888"; } }*/ // return localStorage.getItem('antd-pro-authority') || ['admin', 'user']; return localStorage.getItem('antd-pro-authority') || 'guest'; //修改这里为guest. } function isJSON(str) { try { if (typeof JSON.parse(str) == "object") { return true; } } catch(e) { } return false; } export function setAuthority(authority) { /*let curTime = new Date().getTime(); let authorityvalue = JSON.stringify({data:authority,time:curTime}); return localStorage.setItem('antd-pro-authority', authorityvalue);*/ return localStorage.setItem('antd-pro-authority', authority); } export function setuser(user) { if(user){ return localStorage.setItem('user', JSON.stringify(user)); }else { return localStorage.setItem('user', ""); } }
貌似是说 若是权限是guest 那么就进入到登录页面,若是是admin 或者user 权限 就进入到相应的路由页面 后续研究好了再来补充npm
##使用平常记录redux
src/components/SiderMenu/SiderMenu.js 第212代码。width改右边导航栏长度 导航栏的内容在 src/common/menu.js 中 全局的路由关系是这样一个走向:src/index.js 中经过 app.router(require('./router').default);, 将 src/router.js 绑定到 dva 实例的 router 方法上。而在 src/router.js 中又引入了 src/common/router.js 中的 getRouterData 做为数据源。 若是有点绕,不太能一会儿看明白,那就直接记下面的结论: 于是,src/common/menu.js 中 path 所指向的路径对应于 src/common/router.js 中的路由记录。 getRouterData 同src目录下,.webpackrc.js里面配置了,关联了页面入口设置。 routes:每一个路由对应的页面组件文件。主要定义具体页面的基本结构和内容。 services:用于与后台交互、发送请求等。 models:用于组件的数据存储,接收请求返回的数据等。 components:组件文件夹。每一个页面多是由一些组件组成的,对于一些相对通用的组件,建议将该组件写入components文件夹中,并在routes文件夹中的文件引入来使用。 .roadhogrc.mock.js 拦截api接口地址 utils/authority.js 控制 权限 登陆用户名 redux 和 dva import createHistory from 'history/createHashHistory'; 引入后 可让url中多出# 好比:http://localhost:8000/#/?_k=gebc0m import createHistory from 'history/createBrowserHistory'; 引入后 可让url 中去掉#,形如restfulurl 方式的 url 在页面index.js 中 初始化dva cesjosfhoslhfshgdl hgdl 一、下载或克隆项目源码 2.npm安装相关包文件 npm i 3.启动项目 npm start 4.打包项目 npm run build