25.异步组件及withRouter路由方法使用19-07-09

见代码https://gitee.com/XiaoKunErGe/JianShu.git历史版本第24次提交。
这时打开检查,选择NetWork和JS ,点击切换页面会发现,所有页面对用的组件的代码都在bundle.js里

屏幕快照 2019-07-09 13.26.46.png

访问首页的时候把详情页面和登录页面的代码一起加载了,这样实际上首页的加载速度回很慢。
所以希望访问首页的的时候只加载首页代码,访问详情页的时候再加载详情页的代码,这就需要使用异步组件来实现我们的想法。
异步组件底层会比较复杂,但是我们使用封装起来的第三方组件来实现会非常简单。
这里介绍的是react-loadable
1.到Github上搜索一下https://github.com/jamiebuilds/react-loadable有好多星星✨
我们找到它的介绍安装
yarn add react-loadable
2.到pages目录下的detail目录下创建loadable.js文件,并将GitHub上的react-loadable的example例子复制到这个文件中

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/>;
  }
}

3.对这个例子进行修改

import React from 'react';
import Loadable from 'react-loadable';

const LoadableComponent = Loadable({
    loader: () => import('./'),//这个组件时异步加载的,要下载的是当前目录下的index.js文件,这里的import指的是异步加载语法
//loading指的是你要加载这个组件需要一个时间,在这个时间里可以在这个页年上暂时显示一些内容
 loading(){
    return <div>正在加载...</div>//使用<div>需要引入import React from 'react';不然不识别JSS语法
}
});

//返回一个无状态组件直接把<LoadableComponent/>返回出去
export default () => <LoadableComponent/>

4.到App.js中修改代码

import Detail from './pages/detail
改为
import Detail from './pages/detail/loadable.js';
刷新页面点击列表跳转到详情,这是页面跳转会报一个错

屏幕快照 2019-07-09 13.59.28.png

说不能直接读取this.props.match.params.id,之前引用的是import Detail from './pages/detail可以读取,现在引用的是import Detail from './pages/detail/loadable.js';不能直接读取,所以这里我们需要到detail文件的index.js中引用withRouter
5.在pages目录下detail的index中使用withRouter
import { withRouter } from 'react-router-dom';

export default connect(mapStateToProps, mapDispatchToProps)(withRouter(Detail));

这样就可以调用this.props.match.params.id了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 相信做过微信小程序的都知道,官方给出的微信web开发工具上根本就无法加载node_modules包,即使可以加载,...
    萧玄辞阅读 5,317评论 0 2
  • ——————————按需加载 项目第一步 : 框架 / 路由 先创建 pages 文件夹, 并且给每个页面加文件夹...
    不7而遇_阅读 5,292评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,448评论 1 45
  • 1.想一个从1到18之间的数字。 18 2.想想你在那个数字那么大年龄的时候。现在,集中注意力,想想你在那个年龄时...
    杜妈阅读 3,541评论 0 0
  • 01 老公微信里跳出一条信息:亲爱的,明天晚上6点,xx酒店。我看到之后整个人都呆住了,从没想到这样的事情也能发生...
    查欣欣阅读 2,823评论 0 1

友情链接更多精彩内容