網站搜尋

javascript - 建立元件導出包裝器的最佳方法是什麼,我可以傳入 className


我正在嘗試創建一個包裝函數,我可以傳入一個已導入的組件和一個字串,然後重新導出,而不必每次都創建一個新組件並手動添加 className。

我正在使用 radix ui 組件和 tailwindcss,並想實現類似這樣的效果 export const DropdownContent=styled(DropdownPrimitive.Content, styles.content);,這基本上允許我在不需要所有樣板代碼的情況下對 radix 組件進行樣式設計。

函數已經設計過樣式,左側是 radix 元件,右側要麼是來自 CSS 文件的 tailwind,要麼可以是一個字串 "bg-blue-100"

我已經讓以下內容運作,但 storybook 不喜歡它,而且如果我更新樣式,熱重載時會破壞元件。

import clsx from "clsx";

type Styled = (
  Component: React.FC<any>,
  styles: string
) => React.FC<{ className: string }>;

export const styled: Styled = (Component, styles) => {
  return function StyledComponent({ className, ...props }) {
    return <Component {...props} className={clsx(styles, className)} />;
  };
};

先行感謝您的任何幫助。