当前位置: 首页 > 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 高并发原子性可见性有序性简介 多线程中篇(十)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Apache的80端口被占用以及访问时报错403
  • CentOS 7 防火墙操作
  • CSS盒模型深入
  • Elasticsearch 参考指南(升级前重新索引)
  • java8-模拟hadoop
  • nodejs:开发并发布一个nodejs包
  • Theano - 导数
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • XML已死 ?
  • 分类模型——Logistics Regression
  • 面试总结JavaScript篇
  • 前端临床手札——文件上传
  • 如何学习JavaEE,项目又该如何做?
  • 微信开放平台全网发布【失败】的几点排查方法
  • 以太坊客户端Geth命令参数详解
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #162 (Div. 2)
  • (52)只出现一次的数字III
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (算法)N皇后问题
  • (状压dp)uva 10817 Headmaster's Headache
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .gitignore文件—git忽略文件
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @JsonSerialize注解的使用
  • @RequestMapping用法详解
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ3757] 苹果树
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!