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

97
Vistas
Alternar el nombre del botón al hacer clic en ReactJS

Tengo una variedad de objetos. Entonces, para cada objeto, que tiene subelementos, intento agregarle un botón. Al hacer clic en el botón en particular, el nombre del botón en particular debe alternar entre 'Expandir' y 'Ocultar'. Los estoy mostrando usando el mapa.

 export default function App() {

 const [button,setButton] = useState([
 {pin: 'Expand', id: 0},
 {pin: 'Expand', id: 1},
 {pin: 'Expand', id: 2},
 ]);

 const dataObj = [
 {
 title: 'Home'
 },
 {
 title: 'Service',
 subItems: ['cooking','sleeping']
 },
 {
 title: 'Contact',
 subItems: ['phone','mobile']
 }
 ];

 const expandFunc = (ind) => {
 // toggle logic here
 }
 return (
 <div className="App">
 {
 dataObj.map((arr,ind) => (
 <div>
 <span>{arr.title}:</span>
 {
 // console.log(ind)
 arr.subItems && 
 <button onClick={() => expandFunc(ind)}>{button[ind].pin}</button>
 }
 </div>
 ))
 }
 </div>
 );
}

Así es como se ve la salida: ingrese la descripción de la imagen aquí

Si hago clic en el botón de servicio, el nombre del botón debería alternar entre 'expandir' y 'ocultar'. ¿Podría alguien ayudarme con esto?

almost 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Debe actualizar su estado determinando un nuevo pin basado en el estado actual, intente usar Array.map :

 const expandFunc = (ind) => {
 const togglePin = oldPin => oldPin === "Expand" ? "Hide" : "Expand";
 const updatedButtons = button.map((btn, index) => 
 ind === index ? { ...btn, pin: togglePin(btn.pin) } : btn);
 setButton(updatedButtons);
}
almost 4 years ago · Santiago Trujillo Denunciar

0

Puede usar algo como esto, también sugeriré combinar dataObj en el estado del botón, y usar la clave mientras mapea elementos en React ayuda a omitirlos en el proceso de renderizado para que su sitio sea más rápido.

 export default function App() {

 const [button, setButton] = useState([{
 expanded: false,
 id: 0
 },
 {
 expanded: false,
 id: 1
 },
 {
 expanded: false,
 id: 2
 },
 ]);

 const dataObj = [{
 title: 'Home'
 },
 {
 title: 'Service',
 subItems: ['cooking', 'sleeping']
 },
 {
 title: 'Contact',
 subItems: ['phone', 'mobile']
 }
 ];

 const toggleExpandFunc = useCallback((ind) => {
 // toggle logic here
 setButton([...button.map(btn => btn.id === ind ? { ...btn,
 expanded: !btn.expanded
 } : btn)]);
 }, [button]);
 
 return ( <
 div className = "App" > {
 dataObj.map((arr, ind) => ( <
 div >
 <
 span > {
 arr.title
 }: < /span> {
 // console.log(ind)
 arr.subItems &&
 <
 button onClick = {
 () => toggleExpandFunc(ind)
 } > {
 button[ind].expanded ? 'Expanded' : 'Hide'
 } < /button>
 } <
 /div>
 ))
 } <
 /div>
 );
}

almost 4 years ago · Santiago Trujillo Denunciar

0

También puede necesitar otro estado como Toggle y expnadFunc puede manejarse así;

 const expandFunc = (ind) => {
 let tmp = [...button];
 tmp.map((arr, index) => {
 if (index === ind) {
 return (arr.pin = arr.pin === 'Toggle' ? 'Expand' : 'Toggle');
 }
 return arr;
 });
 setButton(tmp);
 };
almost 4 years ago · Santiago Trujillo 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