Skip to content

Instantly share code, notes, and snippets.

@sebkouba
Created February 17, 2016 06:00
Show Gist options
  • Star 56 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save sebkouba/a5ac75153ef8d8827b98 to your computer and use it in GitHub Desktop.
Save sebkouba/a5ac75153ef8d8827b98 to your computer and use it in GitHub Desktop.
Basic example to pass values between parent and child components in React.
/**
* Basic example to pass values between parent and child components in React
* Seems to be in line with this
* http://stackoverflow.com/questions/24147331/react-the-right-way-to-pass-form-element-state-to-sibling-parent-elements
* Now I have the state in parent and child. Is that good or bad? Why would I need it in child?
* Could probably take that out
* */
class Parent extends React.Component {
constructor(props) {
super(props);
this.state = {
fieldVal: ""
}
}
onUpdate = (val) => {
this.setState({
fieldVal: val
})
};
render() {
return (
<div>
<h2>Parent</h2>
Value in Parent Component State: {this.state.fieldVal}
<br/>
<Child onUpdate={this.onUpdate} />
<br />
<OtherChild passedVal={this.state.fieldVal} />
</div>
)
}
}
class Child extends React.Component {
constructor(props) {
super(props);
this.state = {
fieldVal: ""
}
}
update = (e) => {
console.log(e.target.value);
this.props.onUpdate(e.target.value);
this.setState({fieldVal: e.target.value});
};
render() {
return (
<div>
<h4>Child</h4>
<input
type="text"
placeholder="type here"
onChange={this.update}
value={this.state.fieldVal}
/>
</div>
)
}
}
class OtherChild extends React.Component {
render() {
return (
<div>
<h4>OtherChild</h4>
Value in OtherChild Props: {this.props.passedVal}
</div>
)
}
}
React.render(
<Parent />,
document.getElementById('react_example')
);
@sebkouba
Copy link
Author

@KaranPato
Copy link

If I want to pass value from one child to another child then.
And not a single value but values of multiple inputs.

@sivabalan02
Copy link

When i try this on code i got this.setState undiefined in the parent component. So when i put the following code inside parent component's constructor it works

this.onUpdate = this.onUpdate.bind(this);

@SimonHudec
Copy link

SimonHudec commented Apr 17, 2018

Thanks a lot my friend , finally solved my problem!!

For those who are still in struggle ( It's IN REACT NATIVE ):

PARENT

 func = (smh) => { 
    alert(smh)
  }    

 <ChildComponent func={this.func} /> 

CHILD

 pressHandler(smh) {
    this.props.func(smh)
  }    

 <Text onPress={() => this.pressHandler("sss")}> Click here <Text/>

@sajaddp
Copy link

sajaddp commented May 16, 2018

Thanks a lot!

@Chris533
Copy link

Chris533 commented May 19, 2018

Thanks! Could you please tell me that where did the code this.props.value('text') refer to ? I didn't find detail in React or React Native official website.

point => this.props.onScroll(point)
https://reactjs.org/docs/faq-functions.html

@natintosh
Copy link

@SimonHudec, Thanks alot

@RadekKosiada
Copy link

That is exactly what I was looking for the whole day :) Thank you!

@eduardodicarte
Copy link

Excelent !!!
Works so good

@aboutjquery
Copy link

aboutjquery commented Mar 3, 2019

how can this code working on multi input/state?

like this

    this.state = {
      fieldVal: ""
      otherFieldVal: ""
    }

I tried

  onUpdate = name => (event) => {
    this.setState({ [name]: event.target.value });
  };
  update = name => (event) => {
    console.log(event.target.value);
    this.props.onUpdate(event.target.value);
    this.setState({ [name]: event.target.value });
  };

But the display not update in real time, thanks

@umkhan65
Copy link

Thanks a lot my friend , finally solved my problem!!

For those who are still in struggle ( It's IN REACT NATIVE ):

PARENT

 func = (smh) => { 
    alert(smh)
  }    

 <ChildComponent func={this.func} /> 

CHILD

 pressHandler(smh) {
    this.props.func(smh)
  }    

 <Text onPress={() => this.pressHandler("sss")}> Click here <Text/>

Man I love you. This works

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment