博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react-loadable懒加载
阅读量:6231 次
发布时间:2019-06-21

本文共 4164 字,大约阅读时间需要 13 分钟。

欢迎关注公众号:n平方 如有问题或建议,请后台留言,我会尽力解决你的问题。

简介

react-loadable 官网最精简的描述:

A higher order component for loading components with dynamic imports. 用于加载带有动态导入的组件的高阶组件。

React Loadable是一个小型库,它使以组件为中心的代码分割变得非常容易。

背景

当你的React应用,你把它和Webpack捆绑在一起,一切都很顺利。但有一天你会注意到你的应用程序包变得如此之大以至于它会减慢速度。 是时候开始分解你的应用程序代码了!

例如以下情景:

class Root extends React.Component {	render() {		return (			
); }}ReactDOM.render(
, document.getElementById('app'));复制代码

这种写法缺点: 在首页直接加载了组件,如果很多的时候,那么你的应用首屏展现的时候就会变得非常慢了。

react-loadable的作用 由于路由只是组件,我们仍然可以在路由级别轻松地进行代码拆分。 在你的应用程序中引入新的代码分割点应该是如此简单,以至于你不会再三考虑。这应该是一个改变几行代码和其他一切都应该自动化的问题。 Loadable是一个高阶组件(一个创建组件的函数),它允许您在将任何模块呈现到应用程序之前动态加载它。

概念

import() 当您在Webpack 2+中使用import()时,它将自动为您分割代码,而不需要额外的配置。 这意味着只需切换到import()并使用React Loadable,就可以轻松地试验新的代码分割点。找出最适合你的应用程序的。

Loading... 呈现静态“Loading...”不能与用户进行足够的通信。您还需要考虑错误状态、超时,并使之成为一种良好的体验。

Loadable 用于在呈现模块之前动态加载模块的高阶组件,在模块不可用时呈现加载组件。

const LoadableComponent = Loadable({  loader: () => import('./Bar'),  loading: Loading,  delay: 200,  timeout: 10000,});复制代码

Loadable.Map 允许并行加载多个资源的高阶组件。 可加载的。地图的选择。加载器接受函数对象,并需要一个选项。渲染方法。

Loadable.Map({  loader: {    Bar: () => import('./Bar'),    i18n: () => fetch('./i18n/bar.json').then(res => res.json()),  },  render(loaded, props) {    let Bar = loaded.Bar.default;    let i18n = loaded.i18n;    return 
; }});复制代码

简单使用

安装

npm i react-loadable复制代码

懒加载配置/router/index.js

import React from 'react'import Loadable from "react-loadable"let config = [    {        name: '/',        path: '/',        exact: true,        component: Loadable({            loader: () => import('../components/pc/pc_blog_content'),            loading: () => 
}) }, { name: 'home', path: '/home', exact: true, component: Loadable({ loader: () => import('../components//pc/pc_blog_content'), loading: () =>
}) }, { name: 'detail', path: '/detail/:id', exact: false, component: Loadable({ loader: () => import('../components/pc/pc_article_detail'), loading: () =>
}) }, { name: 'timeline', path: '/timeline', exact: true, component: Loadable({ loader: () => import('../components/pc/pc_timeline_index'), loading: () =>
}) }, { name: 'album', path: '/album', exact: true, component: Loadable({ loader: () => import('../components/pc/pc_album_index'), loading: () =>
}) }, { name: 'message', path: '/message', exact: true, component: Loadable({ loader: () => import('../components/pc/pc_message_index'), loading: () =>
}) }, { name: 'about', path: '/about', exact: true, component: Loadable({ loader: () => import('../components/pc/pc_aboutme_index'), loading: () =>
}) }, { name: 'albumlList', path: '/albumList/:id', exact: false, component: Loadable({ loader: () => import('../components/pc/pc_album_list'), loading: () =>
}) } ]export default config复制代码

结合react-router

import React from 'react';import ReactDOM from 'react-dom';import PCBlogIndex from './components/pc/pc_blog_index'//这句就是引入react-loadableimport routers from './router/index';import { BrowserRouter as Router, Route, Switch } from "react-router-dom";import { Provider } from 'react-redux'import configureStore from './store/configureStore'const store = configureStore();class Root extends React.Component {	render() {		return (			
{/* 导入相关路由配置 */} {routers.map((r, key) =>
)}
); }}ReactDOM.render(
, document.getElementById('app'));复制代码

总结

关于react-loadable服务器渲染等更加高级操作可以参考官网

至于普通的操作按上面两步操作,结合官网的相关配置API,估计你能够实现懒加载的功能了。

最后

如果对 Java、大数据感兴趣请长按二维码关注一波,我会努力带给你们价值。觉得对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。

转载于:https://juejin.im/post/5c9797daf265da60c833ef6c

你可能感兴趣的文章
mysql qadir_MySQL 及 SQL 注入
查看>>
python 播放视频 ftp_视频在通过Python ftplib上传时出现损坏
查看>>
python3 image_python docker快速入门3制作image
查看>>
python代码写名字_【python】【名字】是什么?,Pythonname
查看>>
python调用浏览器生成dom_1分钟快速生成用于网页内容提取的xslt
查看>>
tolua unity 报错_关于LUA+Unity开发_toLua篇【二】
查看>>
java this函数_java this 用法详解
查看>>
java怎么封装表单数据_java 对form表单数据进行封装list
查看>>
java 当前工作目录是指_java取得当前工作目录
查看>>
the java jive_Java Jive
查看>>
hadoop上传文件java_hadoop入门之通过java代码实现将本地文件上传到hadoop的文件系统...
查看>>
放苹果 java_用Java代码模拟实现:一个人不断往箱子里放苹果,另一个人不
查看>>
java ftp 判断目录存在_java判断ftp目录是否存在的方法
查看>>
java httpclient 进度条_如何获得一个文件的上传与Apache HttpClient的4进度条
查看>>
java获取指定日期的后一天_java获得指定日期的前一天,后一天的代码详解
查看>>
java反射工具类_反射和BeanUtils工具类的使用
查看>>
mysql概念模型中的3种基本联系_《数据库基础》练习题
查看>>
java vips_Java IConfigManager.getAllVIPs方法代碼示例
查看>>
java c 转换_由javac完成的任何类型的转换?
查看>>
java properties类_Java Properties 类
查看>>