zoukankan      html  css  js  c++  java
  • react 路由组件懒加载

    react 路由组件懒加载

    1 主要依赖插件:

    react-loadable  :  npm i react-loadable

    antd  :  npm i antd

    2 配置文件:

    新建 loadable.js

    import React from 'react';
    //react 版本17》生命周期名称改为 UNSAFE_componentWillMount
    import Loadable from 'react-loadable';
    import { Spin } from 'antd';
    import NotFound from '../components/NotFound/NotFound'
    //默认配置
    export const defaultsetting = {
      timeout: 10000,
      delay: 300
    };
    
    export const loadable = ( loaders ) => {
      return Loadable( {
        loader: loaders.loader,
        delay: loaders.loadering ? loaders.loadering.delay ? loaders.loadering.delay : 10000 : 10000,
        timeout: loaders.loadering ? loaders.loadering.timeout ? loaders.loadering.timeout : 300 : 300,
        loading: Loading,
      } );
    };
    
    export default loadable;
    
    function Loading ( props ) {
      if ( props.error ) {
        return (
          <div>
            <NotFound NotFoundmode={ 'Error' }/>
          </div>
        );
      }
      else if ( props.timedOut ) {
        return (
          <div style={ {
             '100%',
            height: '50rem',
            textAlign: 'center',
            position: 'relative',
            lineHeight: '50rem',
            zIndex: 100,
          } }>
            <Spin tip="请稍等..." size="large"/>
          </div>
        );
      }
      else if ( props.pastDelay ) {
        return (
          <div style={ {
             '100%',
            height: '50rem',
            textAlign: 'center',
            position: 'relative',
            lineHeight: '50rem',
            zIndex: 100,
          } }>
            <Spin tip="超时,请刷新..." size="large"/>
          </div>
        )
      }
      else {
        return (
          <></>
        )
      }
    }

    编辑 路由文件:router.jsx

    import React from 'react'
    import {Router, Route, Switch,Redirect} from 'react-router-dom'
    import { createBrowserHistory } from 'history'
    
    import {loadable} from '@/utils/loadable'; //懒加载模块
    import Login from '@/pages/login';//普通加载模块
    const Main = loadable({loader: () => import('@/pages/main')});   //引用
    const NotFound404 = loadable({loader: () => import('@/components/NotFound/NotFound')});  //引用
    
    const history = createBrowserHistory();
    
    class RouteMap extends React.Component {
      render () {
        return (
          <Router history={ history }>
            <Switch >
              <Route path="/" exact component={Login}/>
              <Route path="/login" component={Login}/>
              <Route path="/main" component={Main}/>
              <Route path="/404" component={NotFound404}/>
              <Redirect from="/*" to="/404"/>
            </Switch>
          </Router>
        )
      }
    }
    
    export default RouteMap
    
    //_this.props.history.push('/main')//跳转可后退
    //_this.props.history.replace('/main')//跳转不可后退
    // <Redirect  from="/*" to="/" /> //重定向
    // <Route path="*" component={NotFound404}/>//默认

    控制台有这种警告时候是因为react版本语法问题

    react-dom.development.js:88 Warning: componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details.

    * Move code with side effects to componentDidMount, and set initial state in the constructor.
    * Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.

    Please update the following components: LoadableComponent

    解决方法:

    打开   react-loadable     插件启动目录,搜索 componentWillMount     改为  UNSAFE_componentWillMount     

    问题解决。   

  • 相关阅读:
    【更新】Java发送邮件:个人邮箱(QQ & 网易163)+企业邮箱+Android
    git pull 出现 WARNING: POSSIBLE DNS SPOOFING DETECTED!
    Redis解决“重试次数”场景的实现思路
    IDEA更改JavaScript版本
    npm与yarn命令
    SpringBoot+Vue前后端分离项目,maven package自动打包整合
    Vue(九)使用Ant Design入门——环境搭建
    Git常用命令
    Vue(八)全局变量和全局方法
    笔记本电池怎样使用问题
  • 原文地址:https://www.cnblogs.com/wangyongping/p/13666870.html
Copyright © 2011-2022 走看看