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

118
Vistas
Reaccionar solo componente seleccionable

Soy nuevo en reaccionar y estoy tratando de hacer un botón de selección donde solo se puede seleccionar un elemento y anula la selección de los demás elementos. He llegado a seleccionar un elemento, pero no a anular la selección de la parte de otros elementos.

A continuación se muestra el código de mi componente:

 class Diamond extends React.Component { constructor(props) { super(props); this.selectDiamond = this.selectDiamond.bind(this); this.state = {selected : false}; } selectDiamond() { this.setState( {selected : true} ); } render() { if (this.state.selected == true) { return ( <div onClick={this.selectDiamond} className="diamond-selected hover:scale-[105%] duration-300 ">{this.props.text}</div> ) } else { return( <div onClick={this.selectDiamond} className="diamond-unselected hover:scale-[105%] duration-300 ">{this.props.text}</div> ) } } }

y así es como lo renderizo:

 <div> {["BOY", "GIRL", "BAKLA", "TOMBOY"].map((item, i) => ( <Diamond key={i} text={item}/> ) )} </div>

Sé que necesito una referencia a los <Diamond/> s, así que probé algo como:

 let diamonds = []; //and on the constructor method of the component constructor(props) { super(props); diamonds.push(this); }

pero por alguna razón cuando llamo a diamonds.length me da el doble de la cantidad de elementos creados, y tampoco sé qué hacer a partir de ahí. También me gustaría que el primer elemento se seleccione de forma predeterminada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Recomendaría usar ganchos en lugar de componentes de clase. Aquí hay un fragmento de cómo se puede hacer:

 const Diamond = ({ text, setSelected, isSelected }) => { return ( <div onClick={setSelected} className={`diamond-${ isSelected ? "" : "un" }selected hover:scale-[105%] duration-300`} > {text} </div> ); }; const ListDiamonds = () => { const [selectedIdx, setSelectedIdx] = useState(null); return ( <div> {["BOY", "GIRL", "BAKLA", "TOMBOY"].map((item, i) => ( <Diamond key={i} text={item} isSelected={selectedIdx === i} setSelected={() => setSelectedIdx(i)} /> ))} </div> ); };

No lo probé, pero en general el concepto es así.

Además, no presione this desde el constructor, es una mala práctica. Puede leer Rect Lifting State Up: https://reactjs.org/docs/lifting-state-up.html o mejor con ganchos: https://www.freecodecamp.org/news/what-is-lifting-state- up-in-reaction/

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