The parent component store all the state.
The function myChangeHandler trigger on any onChange and change the state
myChangeHandler(event) { this.setState({ [event.target.name]: event.target.value });
and on changing the value of radio button should return in the "Guide is" line Here is the code and let me know if i miss anything
// Get a hook function
const {useState} = React;
class Parent extends React.Component {
constructor(props) {
super(props);
this.state = {
username: '',
avail:'available',
$avail:'non-available',
brandGuideline:'',
};
this.myChangeHandler = this.myChangeHandler.bind(this);
}
myChangeHandler(event) {
this.setState({
[event.target.name]: event.target.value
});
}render(){
return(
<div>
<Child username = {this.state.username}
myChangeHandler = {this.myChangeHandler}
/>
</div>
)
}
}
class Child extends React.Component {
render() {
return (
<div className="label">
<label>
username
</label>
<input
type='text'
name='username'
value={this.props.username}
onChange={this.props.myChangeHandler}
/>
<h1>My username: {this.props.username}</h1>
<div>
<label>
We have a Brand Guide
</label>
<input
type='radio'
name='brandGuideline'
value={this.props.$avail}
onChange={this.props.myChangeHandler}
/>Yes
<input
type='radio'
name='brandGuideline'
value={this.props.avail}
onChange={this.props.myChangeHandler}
/> No
</div>
<h1>Guide is: {this.props.brandGuideline}</h1>
</div>
);
}
};
ReactDOM.render(
<Parent />,
document.getElementById("react")
);
[event.target.name]: event.target.value
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>