Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

359
Visualizações
Cómo implementar un estilo de botón dinámico usando tailwindcss

Lo que quiero:

Tengo un componente Button , que acepta una variant de prop. Quiero que el className del botón cambie en función de la propiedad que se le haya pasado.

El objetivo es evitar el uso de botones de declaraciones if/else , en lugar de usar un solo botón que cambia dinámicamente según la necesidad.

Cosas a tener en cuenta:

  • Estoy usando Tailwindcss como motor principal de estilo.

Solución ideal:

 // provide the variant to component: <Button variant="default" /> // would return: <button className={variantClasses.default} />

Componente del botón:

 interface Props { variant: string; innerText: string; } function Button({ variant, innerText }: Props) { // classes for all variants const variantClasses = { error: "...classes", default: "...classes", }; // if no variant provided, return an error variant. if (!variant) { return <button className={variantClasses.error}>Error</button>; } // else return the correct variant with matching styles. else { return ( <button className={`${variantClasses}.${variant}`}> {innerText || "Button"} </button> ); } } export default Button;

Lo que he probado:

  • Cambiar los valores de interpolación dentro del botón className .
  • Usando una matriz para variantClasses en lugar de un objeto.
about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Solución:

Tailwind no admite la interpolación a través de clases de la misma manera que otras soluciones css, por lo que se necesitaba una solución alternativa. Podemos hacer esto en su lugar:

Esto es lo que debe hacer

  1. Defina una matriz de variantes, proporcionando atributos de name y className .
  2. Busque en la matriz una entrada donde el name coincida con la variant proporcionada.
  3. Si nada coincide, arroja un error... de lo contrario, crea una nueva variable que contenga clases coincidentes.
  4. Proporcione una nueva variable a className prop en el componente de botón.
 interface Props { variant: string; innerText: string; } function Button({ variant, innerText }: Props) { const variantClasses = [ { name: "error", className: "...classes", }, { name: "filled", className: "...classes", }, ]; let activeClass = variantClasses.find((v) => v.name === variant); // if matching variant is not found, throw error variant if (!activeClass) { return <button className={variantClasses[0].className}>Error</button>; } // if variant found, return matching class else { return ( <button className={activeClass?.className}> {innerText || "Button"} </button> ); } } export default Button;
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda