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

195
Views
El componente React no se actualiza después de onClick

En mi proyecto tengo algunos íconos de flecha (contenidos en el componente Skill ) y cuando haces clic en ellos, cambia su nombre de clase. Para verificar si se ha hecho clic en el componente, utilicé una matriz booleana como estado, por lo que cuando se activa el evento onClick, cambia el estado del componente. Los estados cambian correctamente, pero el componente no actualiza la clase y la representación se realiza (al igual que durante el montaje) solo después del primer clic.

El código de la página:

 import { useState, useEffect } from 'react'; import Skill from '../../components/skill/skill.component'; import { skills } from './skills'; import './about-page.styles.scss'; const AboutPage = () => { console.log('render') const [cache, setCache] = useState([]); useEffect(() => { setCache(new Array(skills.length).fill(false)) }, []); const onToggleFunc = n => { cache[n] = !cache[n]; setCache(cache); console.log(cache); } return ( <div className='about-page'> <div className='container'> { skills.map((x, i) => ( <Skill isToggled={cache[i]} skillName={x.name} onClickFunc={() => (onToggleFunc(i))} key={i} /> )) } </div> </div> ) } export default AboutPage;

el código del componente de habilidad:

 import './skill.styles.scss'; import icon from '../../assets/icons/arrow.png'; const Skill = ({ isToggled, skillName, onClickFunc }) => ( <div className='skill-item'> <img src={icon} alt='icon' className={`icon ${isToggled ? 'toggled' : '' }`} onClick={onClickFunc} /> <span className='desc'>{skillName}</span> </div> ) export default Skill;

Aquí la consola del navegador

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Nunca debe mutar una variable de estado; en su lugar, debe crear una nueva referencia y actualizar la variable de estado llamando al método de actualización.

 const AboutPage = () => { const [cache, setCache] = useState(() => new Array(skills.length).fill(false)); function onToggleFunc(n) { // create a new array from the previous one setCache(prevCache => prevCache.map((val, i) => i !== n ? val : !val)); } return ( <div className='about-page'> <div className='container'> { skills.map((x, i) => ( <Skill key={i} isToggled={cache[i]} skillName={x.name} onClickFunc={() => onToggleFunc(i)} /> )) } </div> </div> ) } export default AboutPage;
about 4 years ago · Juan Pablo Isaza 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!