美文网首页
25.异步组件及withRouter路由方法使用19-07-09

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

作者: 你坤儿姐 | 来源:发表于2019-07-09 14:18 被阅读0次

    见代码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了。

    相关文章

      网友评论

          本文标题:25.异步组件及withRouter路由方法使用19-07-09

          本文链接:https://www.haomeiwen.com/subject/uplxkctx.html