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

180
Views
¿Por qué la salida es diferente con React setState()?

no se porque

  • Cuando uso this.setState({count: count+1} clic varias veces solo actualizará el conteo una vez
  • Cuando uso this.setState({count: this.setState.count}) Cada clic actualiza el conteo
  • ¿Por qué diferente?
 class Demo extends React.Component { state = {count: 0}; render() { const {count} = this.state; return <button onClick={() => this.setState({count: count+1})}>count</button> } shouldComponentUpdate(){ return false; } }
  • Entorno react@16.8.4
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Porque sus alcances son diferentes.

this.setState({count: this.setState.count+1}) las acciones de carga state.count número y reasignación están en el mismo ámbito de evento onClick.

Pero la variable de count en this.setState({count: count+1}) se define en el alcance superior de render() y el evento onClick solo recibe el count como variable de nivel superior. Por lo tanto, la función render() solo se ejecuta una vez, por lo que count en render() solo se inicializa una vez (loading state.count solo una vez); cuando hace clic en el botón, solo se ejecutará el alcance del evento onClick (las acciones de reasignación se ejecutarán varias veces), en lugar del alcance render() . Es por eso que la variable de count en el evento onClick siempre será 0.

Hay un ejemplo simple equivalente a su caso:

 state={count:0} function upperLevel() { let {count} = state; function downlevel() { state = { count: count + 1 } console.log(state); } downlevel(); downlevel(); downlevel(); } upperLevel()

Si nos movemos let {count} = state; en downlevel() entonces el número aumentará.

 state = {count: 0} function upperLevel() { //let {count} = state; function downlevel() { let {count} = state; state = {count: count + 1 } console.log(state); } downlevel(); downlevel(); downlevel(); } upperLevel()

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!