当前位置: 首页 > news >正文

dva中组件的懒加载

组件的按需加载是提升首屏性能的重要手段。

dva@2.0使用了react-router@4.0,相关的使用方式有变化,网上的讨论基本上都是旧的,不清楚的话会比较乱,这里做一下记录。

dva@2.0以前

dva@2.0以前的懒加载相关讨论有不少,可以参考dva-example-user-dashboard中的写法,徐飞大佬的文章使用 Dva 开发复杂 SPA,本质上借助的是webpack的require.ensure实现代码分割,参考代码分割 - 使用 require.ensure。
具体实现形如:

function RouterConfig({ history, app }) {
  const routes = [
    {
      path: '/',
      name: 'IndexPage',
      getComponent(nextState, cb) {
        require.ensure([], (require) => {
          registerModel(app, require('./models/dashboard'));
          cb(null, require('./routes/IndexPage'));
        });
      },
    },
    {
      path: '/users',
      name: 'UsersPage',
      getComponent(nextState, cb) {
        require.ensure([], (require) => {
          registerModel(app, require('./models/users'));
          cb(null, require('./routes/Users'));
        });
      },
    },
  ];

  return <Router history={history} routes={routes} />;
}

dva@2.0以后

dva@2.0使用了react-router@4.0,其中的路由是组件式的,原来的方式就不太好搞。因此dva提供了一个dynamic函数来处理。
在dva@2.0发布日志和dva api文档中有介绍。
具体实现形如:

import dynamic from 'dva/dynamic';

function RouterConfig({ history,app }) {
  const UserPageComponent = dynamic({
    app,
    models: () => [
      import('./models/users'),
    ],
    component: () => import('./routes/UserPage'),
  });
  return (
    <Router history={history}>
      <Switch>
        <Route path="/user" component={UserPageComponent} />
        <Route component={IndexPageComponent} />
      </Switch>
    </Router>
  );
}
export default RouterConfig;

相关文章:

  • 「澳洋主数据项目」主数据促企业变革
  • phpstudy中apache的默认根目录的配置
  • 面试总结之人工智能AI(Artificial Intelligence)/ 机器学习(Machine Learning)
  • ActiveMQ之Linux下安装
  • springboot读取配置文件属性
  • PAT A1017 优先队列
  • 后端_ThinkPHP5
  • 从程序员到架构师的最佳技术成长之路
  • Javascript 原型链
  • 交换综合实验一
  • Hanlp分词之CRF中文词法分析详解
  • 急速 debug 实战一(浏览器-基础篇)
  • kubernetes系列07—Pod控制器详解
  • SSH 免密登录
  • Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【mysql】环境安装、服务启动、密码设置
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android系统模拟器绘制实现概述
  • C++11: atomic 头文件
  • const let
  • Cumulo 的 ClojureScript 模块已经成型
  • Git学习与使用心得(1)—— 初始化
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • markdown编辑器简评
  • React-生命周期杂记
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Wamp集成环境 添加PHP的新版本
  • windows下使用nginx调试简介
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 对象管理器(defineProperty)学习笔记
  • 力扣(LeetCode)56
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 通过git安装npm私有模块
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ###STL(标准模板库)
  • #1014 : Trie树
  • #define用法
  • (+4)2.2UML建模图
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (力扣)1314.矩阵区域和
  • (十一)c52学习之旅-动态数码管
  • (学习日记)2024.01.09
  • (一)WLAN定义和基本架构转
  • **PHP分步表单提交思路(分页表单提交)
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 解决重复提交问题