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

222
Views
El estado en el constructor de clases no está definido al llamar a la función después de renderizar

No puedo encontrar ninguna información con respecto a una situación como esta, estoy pasando accesorios p1 de mi componente App al estado de mi componente Child1.

Cuando llamo al método buttonHandler para ver el estado de s1, aparece este error:

 Child1.js:27 Uncaught TypeError: Cannot read properties of undefined (reading 'state')

Componente de clase "Niño1"

 import React from "react"; import { setState } from 'react' class Child1 extends React.Component { constructor(props) { super(props) this.s2 = 0 this.state = { s1: this.props.p1 } console.log(this.state.s1); } componentDidMount() { // console.log('componentDidMount()') console.log('s2 = ' + this.s2); this.s2 += 1 this.setState(() => ({ s1: this.props.p1 + 1 })) } buttonHandler() { console.log(this.state.s1); } render() { return ( <> <div> <h3>State s1</h3> <h4>{this.state.s1}</h4> </div> <hr /> <div> <h3>props from p1 to s2</h3> <h4>{this.s2}</h4> </div> <hr /> <div> <button onClick={this.buttonHandler}>Push</button> </div> </> ) } } export default Child1

Aplicación.js

 import './App.css'; import Child1 from './Child1'; function App() { return ( <> <Child1 p1={88} /> </> ) } export default App;
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Con instancias de clase, debe vincular la función a la instancia del componente :

 // Use arrow syntax (recommended) or bind in the constructor buttonHandler = () => { console.log(this.state.s1); };
about 4 years ago · Juan Pablo Isaza Report

0

Hay 3 problemas con el código anterior:

  1. enlace del método de escucha de eventos (en el método buttonHandler )
  2. inicializando el estado con props (en el constructor)
  3. usando el valor prop dentro setState (en componentDidMount )

Para el enlace del detector de eventos, como se ve en la respuesta de Dennis Valsh:

 buttonHandler = () => { console.log(this.state.s1); };

Para inicializar el estado con accesorios, es mejor usar getDerivedStateFromProps .

 static getDerivedStateFromProps(props, state) { return {s1: props.p1 + 1}; }

Para actualizar el estado usando accesorios, use el argumento de devolución de llamada de setState . (Ver https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous )

 setState((state,props) =>{ return {s1: props.p1 + 1}; }

Sin embargo, dado que lo que está tratando de hacer no está muy claro, diría que no necesita el componentDidUpdate en absoluto y getDerivedStateFromProps es suficiente.

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!