zoukankan      html  css  js  c++  java
  • React 中的 suspense 、lazy 。异步加载页面,和遇到的问题。

    React 中平时一般引入组件都是:

    import Demo from "../pages/Demo/Demo";

      注意:import ... 一定要写在文件的最上方,不然会报错

    我们也可以使用 React.lazy 提供的懒加载方法动态加载组件,例如:

    import React, { lazy, Suspense } from 'react';
    
    const MyEcharts = lazy(() => import("../pages/Demo/compontent/MyEcharts"));

    给加载完成之前,加一个加载中的动画:

      有了懒加载 React.lazy,如果需要再来一个加载中的动画,就要用到 Suspense 。
      Suspense 组件的 fallback 方法用于组件没有加载完成时页面的显示,可以更好的交互。
    <React.Suspense fallback={'加载中'}>
        <OtherComponent />
    </React.Suspense>

    举个完整的 router.js 例子:

    import React, { lazy, Suspense } from 'react';
    import { Route, Switch } from "react-router-dom";
    // import Demo from "../pages/Demo/Demo";
    const Demo = lazy(() => import("../pages/Demo/Demo"));
    // import CssIndex from "../pages/CSSAbout/CssIndex";
    const CssIndex = lazy(() => import("../pages/CSSAbout/CssIndex"));
    // import MyEcharts from "../pages/Demo/compontent/MyEcharts";
    const MyEcharts = lazy(() => import("../pages/Demo/compontent/MyEcharts"));
    // import loading from "../assets/imgs/日历1.png";
    const loading = require("../assets/imgs/loading.png");
    
    let routerData = [
      {
        path:'/',
        component: CssIndex
      },
      {
        path:'/CssIndex',
        component: CssIndex
      },
      {
        path:'/MyDatePicker',
        component: Demo
      },
      {
        path:'/MyEcharts',
        component: MyEcharts
      }
    ];
    
    function SubRoute() {
      return (
          <Switch>
          {
            routerData.map((e,i)=>{
              return <Route exact path={e.path} component={WaitingCompontent(e.component)} key={i}/>
            })
          }
          </Switch>
      )
    }
    
    function WaitingCompontent(WarpComponent) {
      return props => {
        return (
          <Suspense fallback={<img src={loading} alt="" className="page-loading" />}>
            <WarpComponent {...props} />
          </Suspense>
        )
      }
    }
    
    export {
      SubRoute,
      routerData
    };

    副作用

      不清楚是我用的不对,还是其它什么原因,用上面的方法写的页面,会在一些非必要的情况下刷新页面,比如:屏幕缩放。

  • 相关阅读:
    校招基础——时钟
    校招基础——存储器
    1065 A+B and C (64bit) (20分) 测试点3 别用cin
    如何删除windows10右键新建中不需要的选项
    Halcon2019软件安装教程 转载自:https://blog.csdn.net/cashmood/article/details/105081705
    SQL Server 跨服务器视图
    idea快速开发插件
    Npoi to Excel 简单拼写与读取
    关于提供第三方接口一键登录
    微信公众号-入坑指南(一)
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/12463419.html
Copyright © 2011-2022 走看看