Upgrade to Pro — share decks privately, control downloads, hide ads and more …

React: Complexity to Components

React: Complexity to Components

A discussion of the problems we were facing in our large apps, why moving to React worked for us and lessons we learned from building React components that scale.

Avatar for Luke Hansell

Luke Hansell

May 17, 2016
Tweet

Other Decks in Technology

Transcript

  1. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  2. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  3. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  4. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  5. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  6. JSX

  7. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  8. var Component = React.createClass({ render: function() { return React.createElement( “h1",

    null, "Hello World” ) } }) ReactDOM.render(<Component/>, document.body)
  9. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  10. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  11. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  12. function add(x, y) { return x + y } add(2,

    3) // 5 add(2, 3) // 5 add(2, 3) // 5
  13. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  14. var Component = React.createClass({ render: function() { return ( <h1>Hello

    World</h1> ) } }) ReactDOM.render(<Component/>, document.body)
  15. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  16. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  17. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  18. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  19. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  20. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  21. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  22. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  23. var Component = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired }, render:

    function() { return ( <h1>Hello {this.props.name}</h1> ) } }) ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  24. var Component = (props) => ( <h1>Hello {props.name}</h1> ) Component.propTypes

    = { name: React.PropTypes.string.isRequired } ReactDOM.render(<Component name=“Jimmy”/>, document.body)
  25. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  26. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  27. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  28. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  29. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  30. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  31. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  32. var Counter = React.createClass({ getInitialState: function() { return { count:

    0 } }, render: function() { return ( <button onClick={this.onButtonClick}> {this.state.count} </button> ) } onButtonClick: function() { this.setState({ count: ++this.state.count }) } }) ReactDOM.render(<Counter/>, document.body)
  33. // BigComponents.js <div> <div> <img/> <h1></h1> </div> <div> <ul> <li><img

    /><span /></li> <li><img /><span /></li> <li><img /><span /></li> </ul> <div> <button /> <button /> </div>