Layout文件夹:
import React, { Component,Fragment} from 'react' import TabBar from "../TarBar" export default class Layout extends Component { render() { return ( <Fragment> {this.props.meta.flag?<TabBar/>:''} {this.props.children} </Fragment> ) } }
BaseRouter文件夹:
import React, { Component } from 'react' import Layout from "../Layout" import {Route} from "react-router-dom"; // import auth from "@common/auth" class BaseRoute extends Component { render() { let {component,path,...rest} = this.props; return ( <Layout {...rest}> <Route path={path} render={()=>( <this.props.component/> )}/> </Layout> ) } } export default BaseRoute;
App.js:
import React from 'react'; import {HashRouter,Redirect,Switch,Route} from "react-router-dom" import BaseRoute from './BaseRoute' import { routeConfig } from './router' function App() { return ( <HashRouter> <div className="App"> <Switch> <Redirect from='/' to='/home' exact /> {routeConfig.map((item,index)=>( <BaseRoute key={index} {...item}/> ))} </Switch> </div> </HashRouter> ); } export default App;
Router文件夹:
import { Home, Week } from "../pages" export const tabBarRoute = [ { path: '/home', component: Home, meta: { flag: true }, name: '首页' }, { path: '/week', component: Week, meta: { flag: true }, name: '首页' } ] export const noTabBarRoute=[ // { // path: '/login', // component: Login, // meta: { // flag: false, // }, // name: '登录' // } ] export const routeConfig=tabBarRoute.concat(noTabBarRoute)
Pages文件夹:
import Loadable from 'react-loadable'; import Loading from "../loading" const Home = Loadable({ loader:()=>import("../Home"), loading:Loading }) const Week = Loadable({ loader:()=>import("../week"), loading:Loading }) export { Home, Week }
main.js
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import {Provider} from "react-redux" import store from "./store" ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') );
loading文件夹
index:
import React, { Component } from 'react' import "./index.css"; export default class Loading extends Component { render() { return ( <figure> <div className="dot white"></div> <div className="dot"></div> <div className="dot"></div> <div className="dot"></div> <div className="dot"></div> </figure> ) } }
index.css
figure { position: absolute; margin: auto; top: 0; bottom: 0; left: 0; right: 0; width: 6.250em; height: 6.250em; animation: rotate 2.4s linear infinite; } .white { top: 0; bottom: 0; left: 0; right: 0; background: white; animation: flash 2.4s linear infinite; opacity: 0; } .dot { position: absolute; margin: auto; width: 2.4em; height: 2.4em; border-radius: 100%; transition: all 1s ease; } .dot:nth-child(2) { top: 0; bottom: 0; left: 0; background: #FF4444; animation: dotsY 2.4s linear infinite; } .dot:nth-child(3) { left: 0; right: 0; top: 0; background: #FFBB33; animation: dotsX 2.4s linear infinite; } .dot:nth-child(4) { top: 0; bottom: 0; right: 0; background: #99CC00; animation: dotsY 2.4s linear infinite; } .dot:nth-child(5) { left: 0; right: 0; bottom: 0; background: #33B5E5; animation: dotsX 2.4s linear infinite; } @keyframes rotate { 0% { transform: rotate( 0 ); } 10% { width: 6.250em; height: 6.250em; } 66% { width: 2.4em; height: 2.4em; } 100%{ transform: rotate(360deg); width: 6.250em; height: 6.250em; } } @keyframes dotsY { 66% { opacity: .1; width: 2.4em; } 77%{ opacity: 1; width: 0; } } @keyframes dotsX { 66% { opacity: .1; height: 2.4em;} 77%{ opacity: 1; height: 0; } } @keyframes flash { 33% { opacity: 0; border-radius: 0%; } 55%{ opacity: .6; border-radius: 100%; } 66%{ opacity: 0; } }