React异步加载组件以及加载动画

异步加载

较大页面和组件在使用时一般使用异步加载,因为这些比较大的组件如果是同步引入,页面加载时间会特别长。

React组件异步引入

在react中,异步导入使用react.lazy配合Suspense

引入
const Home = React.lazy(()=>import('组件路径'))
使用
const ComponentLoading = Component=>
    <Suspense fallback={'<div>组件未加载完成时显示的内容</div>'}>
        <Component/>
    </Suspense>

实际使用

  • home页
import React from "react";

export default class home extends React.Component{
    constructor(props) {
        super(props);
    }
    render() {
        // console.log(this.props)
        return (
            <div className="home">
                <div>home !</div>
            </div>
        )
    }
}

  • 提前准备好的Loading组件
import React from "react";
import './Loading.scss'
function Loading(){
    return (
        <div className="loading">
            <div className="mainLoading">
                <div className="ladingBar"></div>
            </div>
            <span>Loading....</span>
        </div>
    )
}

export default React.memo(Loading)
使用

由于home组件过小 使用settimeout延迟,模拟组件加载

import React, {Suspense, lazy} from 'react'
const Home = lazy(()=>new Promise(resolve => {
 setTimeout(()=>resolve(import('../view/Home/Home')),2000)
}));

编写通用Suspense包裹的组件,将props传入组件

import Loading from "../components/Loading/Loading";
const ComponentLoading = (Component,props)=>
    <Suspense fallback={<Loading/>}>
        <Component {...props}/>
    </Suspense>

在路由中使用

{
        path:'/home',
        component:props => ComponentLoading(Home,props),
        exact:true,
        name:'首页'
}
效果图

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值