NextJS + TailwindCSS + TS + RadixUI의 변형으로 다형성 버튼을 만드는 방법
8091 단어 reactnextjstailwindcss
import React, { forwardRef } from 'react';
import { cnMerge } from 'common/cn-merge';
import { Slot } from '@radix-ui/react-slot';
const baseClasses = /*tw:*/ `inline-flex items-center justify-center gap-2 font-bold text-center rounded-md`;
const variantsLookup = {
solid: /*tw:*/ `text-white bg-primary hover:shadow-button duration-100`,
outline: /*tw:*/ `text-primary border border-blue-300 hover:bg-blue-600 hover:border-primary`,
subtle: /*tw:*/ `text-primary hover:bg-blue-600`,
};
const sizesLookup = {
base: /*tw:*/ `px-5 py-2.5`,
};
type ButtonProps = {
children: React.ReactNode;
variant?: 'outline' | 'solid' | 'subtle';
size?: 'base';
href?: string;
className?: string;
asChild?: boolean;
};
const Button = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
const { children, variant, size, asChild, className, ...rest } = props;
const classes = cnMerge([
baseClasses,
variantsLookup[variant || 'solid'],
sizesLookup[size || 'base'],
className,
]);
const Comp = asChild ? Slot : 'button';
return (
<Comp {...rest} className={classes} ref={ref}>
{children}
</Comp>
);
});
export default Button;
용법:
<NextLink href="/extension" passHref>
<Button asChild>
<a>
<ExtensionIcon />
Install Chrome Extension
</a>
</Button>
</NextLink>
/* ---- */
<Button asChild>
<a href="https://wwww.test.com" target="_blank" rel="noopener noreferrer">
<ExtensionIcon />
Install Chrome Extension
</a>
</Button>
Reference
이 문제에 관하여(NextJS + TailwindCSS + TS + RadixUI의 변형으로 다형성 버튼을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gabrielmlinassi/how-to-create-a-polymorphic-button-with-variants-in-nextjs-tailwindcss-ts-radixui-350k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)