懒加载高阶组件

import { lazy, Suspense } from 'react';

export type withLazyLoadFactory = () => Promise<{ default: React.ComponentType<any> }>;
export type withLazyLoadProps = {
    fallback?: React.ReactNode;
    [k: string]: any;
};

export default function withLazyLoad(factory: withLazyLoadFactory, props: withLazyLoadProps = {}) {
    const { fallback, ...childrenProps } = props;
    const Element = lazy(factory);

    return (
        <Suspense fallback={fallback}>
            <Element {...childrenProps} />
        </Suspense>
    );
}

调用demo

import withLazyLoad from './withLazyLoad';

const Example = withLazyLoad(() => import('./ExampleComponent'), { fallback: <div>Loading...</div> });

export default Example;

这里的ExampleComponent是需要懒加载的组件,fallback是在组件加载过程中显示的占位符。在使用时,只需要像普通组件一样使用即可:

import Example from './example';

function App() {
    return (
        <div>
            <h1>Lazy Loaded Component</h1>
            <Example />
        </div>
    );
}

export default App;

这样,ExampleComponent就会在需要时才被加载,而不是在页面加载时就被加载。

为什么封装一层

withLazyLoad是一个高阶组件,它的作用是将需要懒加载的组件进行封装,使得这个组件在需要时才会被加载,而不是在页面加载时就被加载。这样可以提高页面的加载速度,减少不必要的资源浪费。

withLazyLoad的实现原理是使用了React的lazy和Suspense组件。lazy组件可以接受一个函数作为参数,这个函数返回一个动态import的Promise,lazy组件会在组件需要渲染时自动加载这个Promise。Suspense组件可以在组件加载过程中显示一个占位符,直到组件加载完成后再显示组件本身。

因此,withLazyLoad的作用就是将需要懒加载的组件使用lazy和Suspense进行封装,使得这个组件在需要时才会被加载,而不是在页面加载时就被加载。这样可以提高页面的加载速度,减少不必要的资源浪费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值