Skip to content

Instantly share code, notes, and snippets.

@prigara
Last active June 20, 2018 16:55
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 prigara/c394275935aed6e079f042b354ae180a to your computer and use it in GitHub Desktop.
Save prigara/c394275935aed6e079f042b354ae180a to your computer and use it in GitHub Desktop.
Extract React Component
// Before refactoring
import React, { Component } from "react";
import "./App.css";
class App extends Component {
constructor(props) {
super(props);
this.state = { isToggleOn: true };
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<div className="App">
<button onClick={this.handleClick}>
{this.state.isToggleOn ? "ON" : "OFF"}
</button>
</div>
);
}
}
export default App;
// After the refactoring
import React, { Component } from "react";
import "./App.css";
import { Button } from "./Button";
class App extends Component {
constructor(props) {
super(props);
this.state = { isToggleOn: true };
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<div className="App">
<Button handleClick={this.handleClick} toggleOn={this.state.isToggleOn}/>
</div>
);
}
}
export default App;
// Extracted React component moved to a different file
import React, { PureComponent } from "react";
import * as PropTypes from "prop-types";
export class Button extends PureComponent {
render() {
return <button onClick={this.props.handleClick}>
{this.props.toggleOn ? "ON" : "OFF"}
</button>;
}
}
Button.propTypes = {
handleClick: PropTypes.func,
toggleOn: PropTypes.bool
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment