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

    副作用

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

  • 相关阅读:
    Pycharm在创建py文件时,如何自动添加文件头注释(类似于钩子特性)?
    Python 函数传递list,传递dict 以及*args和**kargs
    RobotFrameWork(三)数据类型
    shell中脚本变量和函数变量的作用域
    python之json
    Python命名规则
    gdb调试5--工程项目的断点调试
    First Missing Positive
    使用WinDbg下的gflags工具导致程序无法执行
    c++ 从标注输入流读取行
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/12463419.html
Copyright © 2011-2022 走看看