logo
  • 指南
  • 配置
  • 插件
  • API
  • 示例
  • 社区
  • Modern.js 2.x 文档
  • 简体中文
    • 简体中文
    • English
    • 命令
      文件约定
      src/
      App.[tj]sx
      entry.[tj]s
      entry.server.[tj]sx
      modern.runtime.[tj]s
      routes/
      *.[server|node].[tj]sx
      api/
      lambda/*.[tj]s
      server/
      modern.server.[tj]s
      shared/
      config/
      html/
      favicon.*
      icon.*
      mock/
      public/
      upload/
      modern.config.[tj]s
      运行时
      Core
      createRoot
      render
      Router
      router
      SSR
      NoSSR
      renderStreaming
      renderString
      createRequestHandler
      BFF
      useHonoContext
      Utility
      CSS-In-JS API
      Head
      loadable
      📝 编辑此页面
      上一页Head

      #loadable

      用于创建 Loadable 的组件。

      #使用姿势

      import loadable from '@modern-js/runtime/loadable';

      #函数签名

      type Options = {
        resolveComponent?: (
          module: Module,
          props: Props,
        ) => React.ComponentType<Props>,
        fallback?: JSX.Element;
        ssr?: boolean;
      }
      
      function loadable(loadFn: Function, options?: Options) => LoadableComponent

      #参数

      #loadFn

      用于加载组件。

      import loadable from '@modern-js/runtime/loadable';
      
      const OtherComponent = loadable(() => import('./OtherComponent'));

      #options.resolveComponent

      类型:(module: Module, props: Props) => React.ComponentType<Props>

      module 为 loadFn 返回的组件,props 是 loadable 返回的组件接受的 props 参数。默认的话,我们认为 import 的文件都是默认导出 react 组件,这时候直接渲染该组件即可。但当组件是具名导出的,或者我们需要根据具体的 props 动态判断需要渲染哪个组件的时候,可以使用 resolveComponent 来实现。下面是一个示例:

      component.js
      export const Apple = () => 'Apple!';
      export const Orange = () => 'Orange!';
      loadable.js
      const LoadableApple = loadable(() => import('./components'), {
        resolveComponent: components => components.Apple,
      });
      const LoadableOrange = loadable(() => import('./components'), {
        resolveComponent: components => components.Orange,
      });
      const LoadableFruit = loadable(() => import('./components'), {
        resolveComponent: (components, props) => components[props.fruit],
      });

      #options.fallback

      是否在 loading 阶段显示 fallback 内容。

      #options.ssr

      是否支持 SSR,默认值是 true。

      #返回值

      #LoadableComponent

      type LoadableComponent<Props> = React.ComponentType<
        Props & { fallback?: JSX.Element }
      > & {
        preload(props?: Props): void;
        load(props?: Props): Promise<React.ComponentType<Props>>;
      };