当前位置: 首页 > 知识库问答 >
问题:

在高阶组件(HOC)内传递带有道具的组件

史劲
2023-03-14

我指的是这个创建React高阶组件的例子,摘自本文。

我正在努力完全理解

interface PopupOnHoverPropType {
  hoverDisplay: string;
}

const WithPopupOnHover = <P extends object>(BaseComponent: React.FC<P>): React.FC<P & PopupOnHoverPropType> => ({ hoverDisplay, ...props }: PopupOnHoverPropType) => {

  const [displayMsg, setDisplayMsg] = useState<boolean>(false);
  const toggleDisplayMsg = () => {
    setDisplayMsg(displayMsg);
  };
  return (
    <div onMouseEnter={() => setDisplayMsg(true)}>
      <div className={`${hoverDisplay} popup`} onClick={toggleDisplayMsg}/>
      <BaseComponent {...props as P} />
    </div>
  )
};

下面是我对上述代码的理解:

我们通过名称和popuponhover定义了一个HOC,它接受一个React组件(BaseComponent)。BaseComponent附带了它的props(称为P),它返回一个新的React组件,该组件接受props P

如何使用此HOC?以下尝试给出了一个打字脚本错误,即传递了太多参数:

  const enhanced = WithPopupOnHover(Modal);
  const m = Enhanced(a,b,c, "up");

Modal React组件具有以下道具结构:

const Modal: React.FC<{
  a: string;
  b(): void;
  c(locationData: customType): void;
}> = { ... }

共有1个答案

严宏朗
2023-03-14

看起来你刚刚忘记了对象括号。React组件都采用单个props对象参数

const Enhanced = WithPopupOnHover(Modal);
const m = Enhanced({ a, b, c });
 类似资料:
  • 我正在构建一个网页,实现了每个组件共享的通用样式(相同的背景、边框和标题样式)。所以我想我应该制作一个HOC,它接受每个组件的内部内容以及一个标题,并返回一个外部组件,它封装了这个内部组件和标题。起初,我在尝试让它发挥作用时遇到了很多问题,因为我是一个新的反应者,但现在它终于起作用了,但我仍然不明白怎么做。 这是我的HOC 这是WrappedComponent: 这是ListsComponent

  • 我在索引中创建了新的PublicClientApplication。tsx。现在我想把这个传递给我的withAuthHOC。该应用程序正在使用此HOC。tsx。所以我想在HOC中使用PublicClientApplication(pca道具)。我怎么做? 我的AppProps。tsx: 我的索引。tsx: 我的App.tsx: 我的名字是withAuthHOC。tsx:

  • 本文向大家介绍使用高阶组件(HOC)实现一个loading组件相关面试题,主要包含被问及使用高阶组件(HOC)实现一个loading组件时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍高阶组件(HOC)有哪些优点和缺点?相关面试题,主要包含被问及高阶组件(HOC)有哪些优点和缺点?时的应答技巧和注意事项,需要的朋友参考一下 HOC 优点 通过传递props去影响内层组件的状态,不直接改变内层组件的状态,降低了耦合度 缺点 组件多层嵌套, 增加复杂度与理解成本 ref隔断, React.forwardRef 来解决 高阶组件多层嵌套,相同命名的props会覆盖老属性

  • 我试图理解React的高阶组件结构,但是所有的参考资料都假设您已经理解了在编写:BaseComponent{…this.props}{…this.state}时,spread操作符在高阶组件中的作用。如果组件已经作为道具传入,为什么有必要像这样展开道具?