簡體   English   中英

在高階組件 (HOC) 中傳遞帶有道具的組件

[英]Pass a Component with props, inside a Higher-Order-Component (HOC)

我參考了這個創建 React 高階組件的例子, 取自這篇文章

我正在努力完全理解和利用這個 HOC。

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>
  )
};

以下是我對上述代碼的理解:

我們定義了一個名為WithPopupOnHover的 HOC,它接受一個 React 組件(BaseComponent)。 BaseComponent 帶有它的 props(稱為 P),它返回一個新的 React 組件,該組件接受 props P 和PopupOnHoverPropType中的 props。

我如何使用這個 HOC? 以下嘗試給出了 typescript 錯誤,即傳入了太多 arguments:

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

Modal React 組件具有以下 props 結構:

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

看起來您剛剛忘記了 object 支架。 React 組件都采用單個 props object 參數。

const Enhanced = WithPopupOnHover(Modal);
const m = Enhanced({ a, b, c });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM