Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

99
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!