Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

211
Vistas
Cómo establecer dinámicamente un color de fondo en una tarjeta según su categoría con Nextjs

Tengo una aplicación nextjs en la que quiero dar un color de fondo diferente a las tarjetas en relación con su categoría.

Intenté esto:

tarjeta.js

 import { React, useEffect } from "react" import Link from "next/link" import NextImage from "./image" const animColor = "#FF006E"; const decorColor = "#FFBE0B"; const illuColor = "#3A86FF"; const Card = ({ article, categories }) => { useEffect(() => { const overlay = document.getElementById("overlay"); article.attributes.categories.data.forEach(category => { console.log(category.attributes.slug) if (category.attributes.slug === "animation") { overlay.style.backgroundColor = animColor; } if (category.attributes.slug === "decor") { overlay.style.backgroundColor = decorColor; } if (category.attributes.slug === "illustrations") { overlay.style.backgroundColor = illuColor; } }); }, []); return ( <Link href={`/article/${article.attributes.slug}`}> <a className="hover:no-underline"> <div className="card relative grid mb-3 md:mb-0"> <div className="media"> <NextImage image={article.attributes.image} /> </div> <div id="overlay" className="overlay-color"></div> <div className="card-body flex items-end justify-center pb-5"> <p className="text-xl px-2 uppercase text-center text-white"> {article.attributes.title} </p> </div> </div> </a> </Link> ) } export default Card

artículos.js

 import React from "react" import Card from "./card" const Articles = ({ articles, categories}) => { return ( <> <div className="md:grid grid-cols-3 gap-5 justify-center place-content-center"> {articles.map((article, i) => { return ( <Card article={article} categories={categories} key={article.attributes.slug} /> ) })} </div> </> ) } export default Articles

Podría complicar la tarea más de lo que realmente es, pero estoy un poco perdido en mi cabeza. Intento capturar la categoría de cada tarjeta y si category.slug === [cada categoría], entonces cambia el estilo backGroundColor.

Con este código cambia solo el color de la primera carta. Supongo que hay un error en el proceso de iteración que elegí.

¿Alguna idea para resolverlo y tal vez hacerlo mejor?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda