SlideShare una empresa de Scribd logo
1 de 65
Descargar para leer sin conexión
✋Hi Five Fiber!
Lo que viene en React
Leonardo
Garcia Crespo
(Lenny)
slack.meetupjs.com.ar
leogcrespo
leoasis
React hoy
Re-renderizar toda la app
class Message extends Component {
render() {
return <p>Hello {this.props.who}</p>;
}
}
ReactDOM.render(<Message who="World" />, mountNode);
ReactDOM.render(<Message who="Planet" />, mountNode);
React decide cómo re-renderizar
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>
);
}
}
React decide cuándo re-renderizar
Pero renderiza todo sincrónicamente
Problema para árboles de componentes
grandes
Posibles optimizaciones
Priorizar actualizaciones
Qué actualización es más
importante?
• Llegada de datos por AJAX
• Animaciones
• Dispatch de Redux
• Eventos causados por el usuario
Qué actualización es más
importante?
• Llegada de datos por AJAX
• Animaciones
• Dispatch de Redux
• Eventos causados por el usuario
Ejecutar cuando sea más conveniente
• requestAnimationFrame
• requestIdleCallback
Ejecutar en partes (chunks)
• 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
Fiber
Aprovechando el modelo de React al mango
Qué es Fiber?
O, cómo parte el trabajo React?
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);
}
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>;
}
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);
}
Y si pudiéramos reimplementar el call stack?
Fiber, “virtual stack frame”
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
• Unidad de concurrencia
• “Virtual call stack” especializado para UIs
• No interactuamos con Fibers a nivel API en React
(detalle de implementacion)
React mañana
Mejor performance con scheduling y
concurrencia
Misma API*
Cambios semánticos en el ciclo de vida
• 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
Nueva API para especificar prioridades
(TBD)
Demo: Sierpinksy Triangle
Nuevos features
Render de strings y numbers
function Strings(props) {
return `Hello, ${props.world}`;
}
class Double extends Component {
render() {
return this.props.number * 2;
}
}
Render de arrays
function Items() {
return [
<li>Item 1</li>,
<li>Item 2</li>,
<li>Item 3</li>,
]
}
Portals
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?"
/>
)
}
}
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
);
}
Error boundaries
try catch para componentes
try {
renderChildren();
} catch(e) {
handleError(e);
renderChildren();
}
Demo
Co-routines
Intercomunicación entre padre e hijo
Demo de Co-routines
Cuándo?
Primero como reemplazo de implementación,
sincrónico, manteniendo feature parity
Luego con modo “incremental”
(Scheduling y concurrencia)
Links
• React Design Principles
• Fiber Principles: Contributing To Fiber
• React Fiber Architecture
• Andrew Clark: What's Next for React — ReactNext
2016
React pasado mañana
Nuevo lenguaje?
https://facebook.github.io/reason/
ReasonML?
Gracias.

Más contenido relacionado

Similar a Hi Fiber!

Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2juliocombativo
 
Reactvolution
ReactvolutionReactvolution
Reactvolution_Lagash
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCCarlos Hernando
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Ignacio Martín
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?Adrian Diaz Cervera
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAbimael Desales López
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANSWilliam Diaz S
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gioRobert Wolf
 
Conexión a postgres desde
Conexión a postgres desdeConexión a postgres desde
Conexión a postgres desdejbersosa
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gioRobert Wolf
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHPJuan Belón Pérez
 

Similar a Hi Fiber! (20)

Novedades Xamarin.Forms 2
Novedades Xamarin.Forms 2Novedades Xamarin.Forms 2
Novedades Xamarin.Forms 2
 
React
ReactReact
React
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
Reactvolution
ReactvolutionReactvolution
Reactvolution
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDB
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Conexión a postgres desde
Conexión a postgres desdeConexión a postgres desde
Conexión a postgres desde
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHP
 
P2C5 Introducción a JEE5 - II
P2C5 Introducción a JEE5 - IIP2C5 Introducción a JEE5 - II
P2C5 Introducción a JEE5 - II
 

Hi Fiber!