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

235
Visualizações
¿Cómo crear un selector complejo usando mergeStyleSets que hace referencia a una clase?

Estoy construyendo una aplicación web en ReactJS. tengo lo siguiente:

 const MyComponent = (props: { array: Array<Data> }) => { const styles = mergeStyleSets({ container: { backgroundColor: transparent, }, item: { backgroundColor: "#ccc", }, itemContent: { color: "#000", }, }); return ( <div class={styles.container}> {props.array.map((x, i) => ( <div key={i} class={styles.item}> <div class={styles.itemContent}></div> </div> ))} </div> ) };

Esto generará un contenedor con algunos elementos, todos con el mismo fondo y el mismo color de texto.

Selectores más complejos

Ahora quiero tener fondos y colores alternos, por lo tanto, trato de usar nth-child(odd) y obtengo un backgroundColor y un color diferentes para los elementos impares:

 const styles = mergeStyleSets({ container: { backgroundColor: transparent, }, item: { backgroundColor: #ccc, selectors: { ":nth-child(odd)": { backgroundColor: "#ddd", selectors: { itemContent: { color: "#fff", }, }, }, }, }, itemContent: { color: "#000", }, });

Como puede ver, necesito hacer referencia a la clase itemContent dentro del selector de item . Pero mi solución no está funcionando. ¿Cómo puedo conseguir esto?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Solución simple y elegante

Puede dar a cada fila un estilo predeterminado y anular las impares. El siguiente fragmento lo muestra en color prop.

 function App() { const styles = mergeStyleSets({ item: { // Default styles. backgroundColor: '#ccc', color: "black", // Override odd rows. ":nth-child(odd)": { backgroundColor: "#ddd", color: "red", }, }, }) return ( <> {[1, 2, 3, 4, 5, 6, 7, 8, 9].map(x => ( <div key={x} className={styles.item}> <div>{x}</div> </div> ))} </> ) }

Otras soluciones (OMI menos elegantes)

Debe decidir si desea seguir con la parte CSS o JS. Si quieres usar CSS, se vería así:

 function App() { const styles = mergeStyleSets({ item: { backgroundColor: '#ccc', ":nth-child(odd)": { backgroundColor: "#ddd", color: "red", '>div': { // Select all direct divs of odd items. color: "red", }, }, }, }) return ( <> {[1, 2, 3, 4, 5, 6, 7, 8, 9].map(x => ( <div key={x} className={styles.item}> <div>{x}</div> </div> ))} </> ) }

Optar por la solución JS sería verificar manualmente si el índice es par o impar y aplicar la clase CSS en consecuencia.

 function App() { const styles = mergeStyleSets({ item: { backgroundColor: '#ccc', ":nth-child(odd)": { backgroundColor: "#ddd", }, }, odd: { color: "red", }, even: { color: 'initial' } }) return ( <> {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((x, i) => ( <div key={x} className={styles.item}> <div className={i % 2 === 0 ? styles.odd : styles.even}>{x}</div> </div> ))} </> ) }

Nota

Las versiones más recientes de Fluent ya no requieren el uso de palabras clave de selectors .

about 4 years ago · Juan Pablo Isaza 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