• React ----- 路由懒加载的几种实现方案


    传统的两种方式

    1.import()

    符合ECMAScript提议的import()语法,该提案与普通 import 语句或 require 函数的类似,但返回一个 Promise 对象。这意味着模块时异步加载的

    function component() {
     return import( /* webpackChunkName: "lodash" */ 'lodash').then(_ => {
      var element = document.createElement('div');
      element.innerHTML = _.join(['Hello', 'webpack'], ' ');
      return element;
     }).catch(error => 'An error occurred while loading the component');
    }
     
    // 或者使用async
     
    async function getComponent() {
     var element = document.createElement('div');
     const _ = await import(/* webpackChunkName: "lodash" */ 'lodash');
     element.innerHTML = _.join(['Hello', 'webpack'], ' ');
     return element;
    }
    

     

    2.require.ensure

    webpack指定的使用方式

    webpack v1 v2 指定使用方式

    使用方式

    require.ensure([], function(require){
      var list = require('./list');
      list.show();
    ,'list');
     
    <!-- Router -->
    const Foo = require.ensure([], () => {
      require("Foo");
    }, err => {
      console.error("We failed to load chunk: " + err);
    }, "chunk-name");
     
    //react-router2 or 3
    <Route path="/foo" getComponent={Foo} />
    

    3.lazyload-loader

    相对于前两种,此种方式写法更为简洁。

    使用方式

    // webpack 配置文件中 使用lazyload-loader(必须将lazuyload-loader 放置在use的最右侧)
     
    module: {
      rules: [
       {
        test: /.(js|jsx)$/,,
        use: [
         'babel-loader',
         'lazyload-loader'
        ]
       },
    

    业务代码中

    // 使用lazy! 前缀 代表需要懒加载的Router
     
    import Shop from 'lazy!./src/view/Shop';
     
    // Router 正常使用
    <Route path="/shop" component={Shop} />
    
  • 相关阅读:
    no copy constructor available or copy constructor is declared &#39;explicit&#39;
    Jetty:配置连接器
    DataTable数据转换为实体
    iOS 单元測试之XCTest具体解释(一)
    UDP C/S编程
    xml的加密和解密
    lua 加密
    shell脚本加密
    实现业务系统中的用户权限管理--设计篇
    通用用户权限系统设计(数据库设计)
  • 原文地址:https://www.cnblogs.com/yuerdong/p/10605856.html
Copyright © 2020-2023  润新知