javascript - 无法访问使用 React.lazy 导入的组件的静态属性

标签 javascript reactjs typescript react-lazy-load

我在这样的文件中有一个 react 功能组件 -

const Slot: React.ElementType = () => null;
const Component = ({ children }): JSX.Element | null => {
  const childrenArr = React.Children.toArray(children) as React.ReactElement[];
  const slot = childrenArr.find(child => child.type === Slot);

  return (
    <div>
      <div>Hi</div>
      {slot && slot.props.children}
    </div>
  );
};

Component.Slot = Slot;
export default Component;
我通过使用 React.lazy 将它导入另一个组件来使用它
const Comp = React.lazy(() => import(/* webpackChunkName: "comp" */ './Component'))
我在 React.Suspense 下渲染这个组件, 像这样
 <Suspense fallback={null}>
   <Comp>
     Welcome
     <Comp.Slot>Robert</Comp.Slot>
   </Comp>
 </Suspense>
但是Robert不渲染。
另外,我收到了 Comp.Slot 的 Typescript 错误,说
Property 'Slot' does not exist on type 'LazyExoticComponent<{ (): Element | null; Slot: FunctionComponent<any>;}>'.
解决此问题的最佳方法是什么?请帮忙。

最佳答案

我相信lazy仅适用于默认导出,并且仅适用于导出的确切组件,因为它会在其周围创建某种 HOC。
你能做的就是制作这部分

   <Comp>
     Welcome
     <Comp.Slot>Robert</Comp.Slot>
   </Comp>
独立组件并在其上使用惰性。

关于javascript - 无法访问使用 React.lazy 导入的组件的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62530334/

相关文章:

reactjs - "class"属性在 JSX 中工作 : How?

javascript - 导航实验正在卸载选项卡

typescript - 如何默认具有交集类型的泛型函数参数

javascript函数转java

javascript - 使用 React 将 Kendo 小部件值绑定(bind)到 Kendo 模板/可观察对象?

javascript - 不使用 JSONP 对不同域的 AJAX 调用

node.js - MiddlewareConsumer 的 Nest/node.js 问题

JavaScript 正则表达式在 IE/Firefox 中失败

javascript - 如何正确使用 redux 和 react-native 导航

javascript - 单击后从输入中获取值并计算它 - Angular 5