Lazy

懒加载组件,按需异步加载组件代码。

Props

ts
interface LazyProps<T extends Component> extends LazyLoadOptions {
  loader: LazyLoader<T>
  props?: WithProps<T>
  children?: ComponentProps<T>['children']
}

interface LazyLoadOptions {
  loading?: () => View
  delay?: number
  timeout?: number
  onError?: (e: unknown) => View
}
属性类型说明
loader() => Promise<{ default: Component }>组件加载器
propsWithProps<T>传递给加载组件的属性
childrenRenderChildren子节点
loading() => View加载中显示的内容
delaynumber延迟显示 loading 的时间(ms)
timeoutnumber超时时间(ms)
onError(e: unknown) => View加载失败时显示的内容

lazy()

创建懒加载包装组件。

类型定义

ts
declare function lazy<T extends Component>(
  loader: () => Promise<{ default: T }>,
  options?: LazyLoadOptions
): LazyWrapper<T>

示例

使用 lazy() 函数:

tsx
import { lazy, Suspense } from 'vitarx'

const AsyncComponent = lazy(() => import('./HeavyComponent'))

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <AsyncComponent />
    </Suspense>
  )
}

使用 Lazy 组件:

tsx
import { Lazy } from 'vitarx'

const AsyncComponent = Lazy({
  loader: () => import('./HeavyComponent'),
  delay: 200
})

function App() {
  return <AsyncComponent />
}

preloadComponent()

预加载懒加载组件。

类型定义

ts
declare function preloadComponent<T extends Component>(loader: LazyLoader<T>): Promise<T>

示例

ts
import { preloadComponent } from 'vitarx'

const loader = () => import('./HeavyComponent')
preloadComponent(loader) // 提前加载

参考Lazy 详解