passing data from child to parent component via callback function but somehow it's not working. what am I doing wrong here? passing data from child to parent component - react - via callback function
https://codepen.io/silentarrowz/pen/GEMQEP?editors=0010
and here's the code
class App extends React.Component{
    constructor(props){
      super(props);
      this.state={
        input:'this is the input for now'
      }
   //this.handleInput=this.handleInput.bind(this);   
    }
    handleInput(x){
      this.setState({
        input:x
      });
      alert(this.state.input);
    }
  render(){
    return(
      <div>
        <h1>Passing props from Child to Parent Component</h1>
        <Child getInput={this.handleInput} />
        here's the input: {this.state.input}
        </div>
    );
  }
 }
class Child extends React.Component{
  constructor(){
    super();
    this.state={
      text:''
        }
    }
  passingProps(e){
    var newInput=e.target.value;
    //alert(newInput);
   this.setState({
     text:newInput
    });
  this.props.getInput(this.state.text);
  }
  render(){
    return(
      <div>
      <input type="text" placeholder="please input a name..." onChange={this.passingProps} />
        </div>
    )
  }
}
ReactDOM.render(
  <App/>,
  document.getElementById('app')
);
                import React, { useState } from 'react'; import Child from './Child'; function App() { const [childData, setChildData] = useState({ name: 'unknown', age: 'unknown' }); const passData = (data) => { setChildData(data); }; return ( <div className="App"> <Child passData={passData} /> <p>The person info from the Child ...
To pass data from a child component to its parent, we can call a parent function from the child component with arguments. The parent function can be passed down to the child as a prop, and the function arguments are the data that the parent will receive.
There are a couple of issues.
1) You have to bind passingProps
constructor(){
    super();
    this.state={
      text:''
    }
    this.passingProps = this.passingProps.bind(this);
}
2) this.setState is asynchronous, so it's not guaranteed that this.state.text will be set to the value you want by the time you pass it to this.props.getInput. You can either do 
this.props.getInput(newInput)
or
this.setState({ text: newInput }, () => {
  this.props.getInput(this.state.text);
})
to resolve that issue.
class App extends React.Component{
constructor(props){
  super(props);
  this.state={
    input:'this is the input for now'
  }
  this.handleInput=this.handleInput.bind(this);   
}
handleInput(event){
  let value = event.target.value;
  this.setState({
    input:value
  });
}
render(){
   return(
     <div>
       <h1>{this.state.input}</h1>
       <Child getInput={this.handleInput} />
     </div>
   );
  }
}
 class Child extends React.Component{
   constructor(){
      super(props);
}
render(){
   return(
     <div>
     <input type="text" placeholder="please input a name..." onChange={this.props.getInput} />
    </div>
     )
   }
}
ReactDOM.render(
  <App/>,
  document.getElementById('app')
);
Here is the answer for your question. I hope your proplem is solved.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With