TailwindCSS의 클래스를 TypeScript와 연결
10461 단어 tailwindcsstypescriptreactjavascript
utility-first
CSS 프레임워크입니다. 또한 결과 번들에서 사용하지 않는 모든 유틸리티 클래스를 자동으로 제거합니다. 그러나 이는 class name
와 같이 Tailwind에서 제공하는 전체bg-gray-900
가 코드 내에 있는 경우에만 작동합니다.구조에 대한 유틸리티 기능
이 제한을 극복하기 위해 다음과 같이 끝내기 전에 약간 놀았습니다.
function cx(...cns: (boolean | string | undefined)[]): string {
return cns.filter(Boolean).join(" ");
}
이 작은 기능은 이 경우 매우 편리합니다. 이를 통해 다양한 방식으로 연결
utility classes
할 수 있습니다. 예를 들어:const styles = {
base: "bg-gray-700",
abc: {
a: "hover:bg-gray-600",
b: "hover:bg-gray-500",
c: "hover:bg-gray-400",
},
};
const classes = cx(styles.base, styles.abc["b"]);
bool expressions
를 사용하는 것도 가능합니다.const classes = cx(true && "bg-gray-700", false && "hover:bg-gray-600");
클래스
hover:bg-gray-600
는 표현식 결과가 cx
이므로 false
로 필터링됩니다.전체 예
import { PropsWithChildren, ReactElement } from "react";
const styles = {
base: "rounded",
variants: {
default: "bg-gray-600",
primary: "bg-blue-600",
secondary: "bg-green-600",
},
sizes: {
sm: "px-1 py-1",
md: "px-2 py-1",
lg: "px-3 py-1",
},
};
type Variant = keyof typeof styles.variants;
type Size = keyof typeof styles.sizes;
type Props = {
type?: "button" | "submit";
variant?: Variant;
size?: Size;
disabled?: boolean;
};
function Button({
type = "button",
variant = "default",
size = "md",
disabled = false,
children,
}: PropsWithChildren<Props>): ReactElement {
const classes = cx(
styles.base,
!disabled && styles.variants[variant],
styles.sizes[size],
disabled && "bg-gray-800"
);
return (
<button type={type} className={classes} disabled={disabled}>
{children}
</button>
);
}
코드베이스 어딘가에서 다음과 같이 사용할 수 있습니다.
<Button>Click</Button>
<Button variant="primary">Click</Button>
<Button variant="secondary" sizes="lg">Click</Button>
<Button disabled>Click</Button>
Reference
이 문제에 관하여(TailwindCSS의 클래스를 TypeScript와 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ztk37/concatenating-classes-in-tailwindcss-with-typescript-4bcj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)