你能解构延迟加载的 React 组件吗?

Pau*_*erg 6 reactjs es6-module-loader react-suspense

使用 es6 导入,您可以执行以下操作:

import { MyComponent } from "../path/to/components.js";

export default function () {
  return <MyComponent/>;
}
Run Code Online (Sandbox Code Playgroud)

我也可以这样做React.lazy吗?

const { MyComponent } = lazy(() => import("../path/to/components.js"));
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,但我不确定它是否与此错误或我遇到的其他错误有关:

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义

amd*_*dan 6

当我遇到 FontAwesome 的问题时,我是这样做的:

const FontAwesomeIcon = React.lazy(()=> import('@fortawesome/react-fontawesome').then(module=>({default:module.FontAwesomeIcon})))
Run Code Online (Sandbox Code Playgroud)


pop*_*ick 6

当然可以。这是很多人都犯过的无心错误

const sub = 'a'
const obj = { a: 'alpha', b: 'beta' }

obj.sub // wrong (accessing a direct key)
obj[sub] // right (computed property)
Run Code Online (Sandbox Code Playgroud)

许多人都犯了同样的错误。这是一项正在进行的工作,但效果非常好,感谢所有其他答案来根据我的需要定制它。

const ComponentFactory = ({ componentName, ...props }) => {
  const Component = lazy(() => import('baseui/typography').then((module) => ({ default: module[componentName] })))

  return (
    <Suspense fallback={<div>Loading...</div>}>
      <Component {...props} />
    </Suspense>
  )
}
Run Code Online (Sandbox Code Playgroud)

用法:

    <ComponentFactory
      componentName='Paragraph1'
      margin='0.1rem 0rem 0.25rem 0.3rem'
      color={style[of].headingText}
    >
      {headingMessage}
    </ComponentFactory>
Run Code Online (Sandbox Code Playgroud)


JLa*_*rky 5

如果您使用react-lazily ,则可以

import { lazily } from 'react-lazily';
const { MyComponent } = lazily(() => import("../path/to/components.js"));
Run Code Online (Sandbox Code Playgroud)

它还允许导入多个组件:

const { MyComponent, MyOtherComponent, SomeOtherComponent } = lazily(
  () => import("../path/to/components.js")
);
Run Code Online (Sandbox Code Playgroud)

有关更多选项,请参阅此答案