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

Hi Fiber!

Hi Fiber!

Vamos a conocer que es lo que se viene en la próxima version de React. Qué es Fiber? Qué problemas son los que tiene hoy React, y cómo Fiber los intenta solucionar? Qué nuevas features permite? Cuándo va a estar disponible?

Leonardo Garcia Crespo

February 01, 2017
Tweet

More Decks by Leonardo Garcia Crespo

Other Decks in Technology

Transcript

  1. class Message extends Component { render() { return <p>Hello {this.props.who}</p>;

    } } ReactDOM.render(<Message who="World" />, mountNode); ReactDOM.render(<Message who="Planet" />, mountNode);
  2. class Increment extends Component { state = { value: 0

    }; handleIncrement() { this.setState({ value: this.state.value + 1 }); } render() { return ( <div> {this.state.value} <button onClick={this.handleIncrement.bind(this)}> +1 </button> </div> ); } }
  3. Qué actualización es más importante? • Llegada de datos por

    AJAX • Animaciones • Dispatch de Redux • Eventos causados por el usuario
  4. Qué actualización es más importante? • Llegada de datos por

    AJAX • Animaciones • Dispatch de Redux • Eventos causados por el usuario
  5. • Pausar actualización si hay otra más importante • Reanudar

    actualizaciones pausadas • Abortar actualizaciones que ya no tienen sentido • Reusar trabajo parcial anterior de otras actualizaciones
  6. function work(arg1, arg2) { let i = 0; while (i

    < 1000) i++; //Hacemos algo // ... const fooRes = foo(arg1); const barRes = bar(arg2); return baz(fooRes, barRes); }
  7. function Work(props) { let i = 0; while (i <

    1000) i++; //Hacemos algo // ... const fooRes = <Foo arg1={props.arg1} />; const barRes = <Bar arg2={props.arg2} />; return <Baz>{fooRes}{barRes}</Baz>; }
  8. function Work(props) { let i = 0; while (i <

    1000) i++; //Hacemos algo // ... const fooRes = React.createElement(Foo, { arg1: props.arg1 }); const barRes = React.createElement(Bar, { arg2: props.arg2 }); return React.createElement(Baz, null, fooRes, barRes); }
  9. Stack frame Fiber (virtual stack frame) Función Componente Sub funciones

    children Dirección de retorno Componente Padre Parámetros props Valor de retorno Cambios en el DOM
  10. • Unidad de concurrencia • “Virtual call stack” especializado para

    UIs • No interactuamos con Fibers a nivel API en React (detalle de implementacion)
  11. • componentWillMount, componentWillUpdate, componentWillReceiveProps NO deben tener side effects. •

    componentWillReceiveProps puede tener setState, pero solo sobre la misma instancia • componentDidMount, componentDidUpdate y componentWillUnmount son los UNICOS que permiten side effects
  12. function Strings(props) { return `Hello, ${props.world}`; } class Double extends

    Component { render() { return this.props.number * 2; } }
  13. class CreateThing extends Component { state = { showConfirmation: false

    }; render() { return ( <button onClick={() => this.setState({ showConfirmation: true }) }> Create Thing </button> <Modal isOpen={this.state.showConfirmation} title="Create Thing" content="Are you sure?" /> ) } }
  14. const node = document.getElementById('modal'); function ModalContent(props) { return ( <div>

    <h1>{props.title}</h1> <p>{props.content}</p> </div> ); } function Modal(props) { return ReactDOM.unstable_createPortal( props.isOpen && ( <ModalContent title={props.title} content={props.content} /> ), node ); }
  15. Links • React Design Principles • Fiber Principles: Contributing To

    Fiber • React Fiber Architecture • Andrew Clark: What's Next for React — ReactNext 2016