Skip to content

Instantly share code, notes, and snippets.

@linkstrifer
Last active May 11, 2017 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save linkstrifer/06e919dd4609f09f995eaee1da7b391c to your computer and use it in GitHub Desktop.
Save linkstrifer/06e919dd4609f09f995eaee1da7b391c to your computer and use it in GitHub Desktop.
React function vs class component example
class Form extends React.Component {
state = {
name: '',
selectedRadio: 'radio1'
};
handleInputChange = (event) => {
event.persist();
this.setState(() => ({name: event.target.value}));
};
handleSubmit = (event) => {
event.preventDefault();
this.props.addToList(this.state);
this.setState(() => ({name: ''}));
};
handleRadio = (event) => {
this.setState({
selectedRadio: event.target.value
});
};
render() {
return (
<form onSubmit={ this.handleSubmit }>
<input value={ this.state.name } onChange={ this.handleInputChange } />
<label>
<input type="radio"
value="radio1"
checked={ this.state.selectedRadio === 'radio1' }
onChange={ this.handleRadio } />
<span>radio1</span>
</label>
<label>
<input type="radio"
value="radio2"
checked={ this.state.selectedRadio === 'radio2' }
onChange={ this.handleRadio } />
<span>radio2</span>
</label>
<label>
<input type="radio"
value="radio3"
checked={ this.state.selectedRadio === 'radio3' }
onChange={ this.handleRadio } />
<span>radio3</span>
</label>
<button type="submit">
Submit
</button>
</form>
);
}
}
const Item = (props) => {
function toggle() {
props.toggleItem(props.index);
}
return (
<div onClick={ toggle }>
<article>
<h2>
{ props.name }
{
props.selected &&
<i className="fa fa-star" />
}
</h2>
</article>
</div>
);
}
const List = (props) => {
const list = props.items.map((item, index) => {
return <Item { ...item }
key={ index }
index={ index }
toggleItem={ props.toggleItem } />
});
return (
<div>
{ list }
</div>
);
}
class App extends React.Component {
state = {
list: [
{
name: 'item 1'
},
{
name: 'item 2'
},
{
name: 'item 3'
}
]
};
addToList = (item) => {
this.setState((prevState) => {
prevState.list.push(item);
});
};
toggleSelected = (index) => {
this.setState((prevState) => {
prevState.list[index].selected = !prevState.list[index].selected
});
};
render() {
return (
<div>
<Form addToList={ this.addToList } />
<List items={ this.state.list }
toggleItem={ this.toggleSelected } />
</div>
)
}
}
ReactDOM.render(<App />, mountNode);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment