| 56 | * @param loader 需要懒加载的组件 |
| 57 | */ |
| 58 | export function Loadable<Props>( |
| 59 | loadFn: (props: Props) => Promise<DefaultComponent<Props>>, |
| 60 | options?: LoadableOptions<Props> |
| 61 | ): LoadableComponent<Props> { |
| 62 | return loadable( |
| 63 | (props) => { |
| 64 | let p = loadFn(props); |
| 65 | |
| 66 | if (isValidStr(options?.componentName)) { |
| 67 | // 增加promise加载用时统计 |
| 68 | p = promiseUsage(p, String(options?.componentName)); |
| 69 | } |
| 70 | |
| 71 | if (options?.showLoading === true) { |
| 72 | p = promiseLoading(p); |
| 73 | } |
| 74 | |
| 75 | return pMinDelay(p, 200, { delayRejection: false }); |
| 76 | }, |
| 77 | { |
| 78 | fallback: <LoadingSpinner />, |
| 79 | ...options, |
| 80 | } |
| 81 | ); |
| 82 | } |