封装Router

扫码查看

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; }
  }
  
01-25 10:14
查看更多