前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为你的React工程添加异步组件支持

为你的React工程添加异步组件支持

作者头像
腾讯IVWEB团队
发布2020-06-28 00:25:44
1.2K0
发布2020-06-28 00:25:44
举报
文章被收录于专栏:腾讯IVWEB团队的专栏

异步组件

首先,要明白组件的概念。React中所有继承React.Component的类都是一个React组件,React组件可大可小,功能多样。React组件一般情况下都是静态写死,也就是在代码中写死,最终编译成一个index.bundle.js,一次性加载完毕。但是某些时候,我们需要更加灵活的组件引入,只有真正用到这个组件的时候才去请求a.component.js,然后再渲染这个组件。一些等到用时再去下载的组件就叫做异步组件。

应用场景

最常用的是web单页应用。这种页面的特点是工程量庞大,不可能一次性加载所有页面组件,需要按路由(业务)对代码进行切分(code spliting)。另一种应用场景是动态的渲染需求,例如你的页面中有一个广告位,根据后台下发的字段渲染不同的广告控件,这些广告控件的代码可能独立于页面工程。

做法

首先,本文的编译环境固定为:webpack+React+Typescript。如果不使用webpack的同学,本文并不适用。

babel配置

webpack在2.0之后支持TC39的懒加载提案,使用import()方法进行模块的懒加载操作。如需使用,需要再为babel添加插件:

代码语言:javascript
复制
npm i babel-plugin-syntax-dynamic-import -D

然后以插件的形式引入babel

代码语言:javascript
复制
{
  "plugins": ["syntax-dynamic-import"]
}

tsconfig.json配置

如果你使用ts,需要将目标模块定义为esnext,不然使用import()函数会报错。

代码语言:javascript
复制
"module": "esnext",

使用react-loadable封装异步组件

代码语言:javascript
复制
import Loadable from 'react-loadable'
import Loading from './my-loading-component';

const LoadableComponent = Loadable({
  loader: () => import('./my-component'),
  loading: Loading,
});

export default class App extends React.Component {
  render() {
    return <LoadableComponent/>;
  }
}

大工搞定,可以像使用一般组件一样使用LoadableComponent组件,组件对应的js代码并不打入主包中。当该组件第一次渲染时,会请求对应的component.chunk.js,等js文件返回后,再渲染组件内容。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异步组件
  • 应用场景
  • 做法
    • babel配置
      • tsconfig.json配置
        • 使用react-loadable封装异步组件
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档