aplicaciones web eran puramente server side... Los primeros desarrolladores tallaban sus creaciones usando el patrón MVC. Sus sistemas eran monoliticos y difíciles de escalar...
dispositivos, crecía la necesidad de sistemas más complejos e interconectados. Sistemas mas complejos requieren equipos mas grandes. Grandes equipos trabajando bajo una misma base de código puede traer muuuchos problemas. Escalar verticalmente sistemas monoliticos se volvia ineficiente. Los sistemas terminaban estando fuertemente acoplados. Consumir modulos era extremadamente dificil.
manera omogenea entre navegadores. Hoy jQuery ya no es necesario. (IE 10+) Javascript del presente Hoy en día podemos correct Javascript en el servidor (NodeJS). El tooling existe al rededor de esta tecnología. Hoy en día no escribimos Javascript, sino alguno de estos lenguajes derivados: ECMAScript 6-7-2015-2016-2017-next... Typescript Dart Otros lenguajes como Java, Scala, Go, etc.
tenemos acceso a tipos e interfaces. Usando JSX tenemos acceso a una sintaxis similar a HTML dentro de Javascript. Usando NodeJS podemos correr Webpack, una herramienta que nos permitirá crear bundles de nuestro código. Usando NodeJS podemos correr Express y servir nuestro proyecto de forma simple. Javascript del presente
pasos c l a s s T e s t { p r o p e r y = ' W o r l d ' ; g r e e t e r ( ) { r e t u r n ` H e l l o $ { t h i s . p r o p e r t y } ` ; } } e x p o r t d e f a u l t T e s t ; No hay tipado estricto. greeter() es un método que devuelve un string. `Hello ${this.property}` es un template string, permite inyectar expresiones. export default hace disponible la clase para ser importada por otros modulos.
R e a c t , { C o m p o n e n t } f r o m ' r e a c t ' ; / / A c c e d e a R e a c t . C o m p o n e n t l e t f o o = ' a ' ; / / s i m p l i f i c a d o : e l r e e m p l a z o d e l a k e y w o r d ` v a r ` c o n s t f o o = ' a ' ; / / c o n s t a n t e : n o p u e d e c a m b i a r d e r e f e r e n c i a c o n s t { f o o } = b a r ; / / e q u i v a l e n t e a c o n s t f o o = b a r . f o o ; c o n s t f o o = ( ) = > 1 ; / / l a m b d a q u e d e v u e l v e 1 , e q u i v a l e a : / / f u n c t i o n ( ) { r e t u r n 1 ; c o n s t a = [ 1 , 2 , 3 ] ; c o n s t b = [ 5 , . . . a ] ; / / b = [ 5 , 1 , 2 , 3 ] ; e x p o r t d e f a u l t F o o ; / / i m p o r t F o o f r o m ' . / F o o ' e x p o r t c o n s t f o o = { } ; / / i m p o r t { f o o } f r o m ' . / F o o ' [ 1 , 2 , 3 ] . m a p ( ( i t e m , i n d e x ) = > i t e m + 1 ) / / r e t u r n s a n e w a r r a y [ 2 , 3 , 4 ] [ 1 , 2 , 3 ] . f o r E a c h ( ( i t e m , i n d e x ) = > c o n s o l e . l o g ( i t e m + 1 ) ) / / l o g s [ 2 , 3 , 4 ] Para todo lo demás, existe la Mozilla Developer Network
de interfaces de usuario (UI) basadas en componentes. Estos componentes pueden ser reutilizados y generados a partir de nuestra propia lógica. Por ejemplo, generar una lista es tan simple como iterar sobre un Array. El fuerte de la libreria esta en crear Single Page Applications. Es decir, una aplicación que va a correr puramente a partir de Javascript, sin necesidad de realizar una peticion de HTML al servidor. De alguna manera, las aplicaciones hechas en React son similares a las aplicaciones mobile. Son independientes y se comunican de forma asíncrona con uno o más servicios externos. Sobre React
pasos i m p o r t R e a c t f r o m ' r e a c t ' ; c l a s s T e s t e x t e n d s R e a c t . C o m p o n e n t { p r o p e r y = ' W o r l d ' ; r e n d e r ( ) { r e t u r n ( < h 1 > H e l l o { t h i s . p r o p e r y } < / h 1 > ) ; } } e x p o r t d e f a u l t T e s t ; Las etiquetas de HTML son parte de la sintaxis de JSX. Las llaves {} son utilizadas para ejecutar código Javascript dentro de JSX. El método render() es parte del lifecyle de react (reservado)
React: primeros pasos i m p o r t R e a c t f r o m ' r e a c t ' ; c l a s s T e s t e x t e n d s R e a c t . C o m p o n e n t { p r o p e r y = [ { n a m e : ' D a n i e l ' , l a s t N a m e : ' B e l o h l a v e k ' } , { n a m e : ' A s h ' , l a s t N a m e : ' K e t c h u m ' } , { n a m e : ' R i c k ' , l a s t N a m e : ' S a n c h e z ' } ] ; r e n d e r ( ) { r e t u r n t h i s . p r o p e r y . m a p ( i t e m = > ( < d i v > { i t e m . l a s t N a m e } , { i t e m . n a m e } < / d i v > ) ) ; }
extienda de otro. React: composición por sobre herencia i m p o r t R e a c t f r o m ' r e a c t ' ; i m p o r t M y W r a p p e r f r o m ' . / M y W r a p p e r ' ; / / . j s n o e s n e c e s a r i o c l a s s T e s t e x t e n d s R e a c t . C o m p o n e n t { r e n d e r ( ) { r e t u r n ( < M y W r a p p e r > A l g u n t e x t o < b u t t o n > C l i c k < / b u t t o n > < / M y W r a p p e r > ) ; } } e x p o r t d e f a u l t T e s t ; En general, lo mejor es componer componentes anidandolos y comunicandolos por medio de las herramientas que nos provee React.
r t R e a c t f r o m ' r e a c t ' ; i m p o r t M y W r a p p e r , { O t h e r C o m p o n e n t } f r o m ' . / M y W r a p p e r ' ; c l a s s T e s t e x t e n d s R e a c t . C o m p o n e n t { d o S o m e t h i n g ( ) { r e t u r n ; } r e n d e r ( ) { r e t u r n ( < M y W r a p p e r > < O t h e r C o m p o n e n t d i s a b l e d / > < b u t t o n o n C l i c k = { ( ) = > t h i s . d o S o m e t h i n g ( ) } > C l i c k < / b u t t o n > < / M y W r a p p e r > ) ; } } A diferencia de HTML, JSX permite hacer self-closing de cualquier tag. A diferencia de HTML, JSX permite que los atributos contengan expresiones. A diferencia de HTML, JSX permite que el contenido de un elemento contenga expresiones. JSX NO ES HTML.
rapidamente de que necesitamos compartir informacion entre ellos. Una de las maneras por las cuales un componente recibe informacion es por medio de Props. React: props Las props son propiedades que el componente padre pasa a un hijo. Normalmente el componente hijo se mostrará o funcionará distinto en base a esta información. En JSX pasar un prop es tan simple como especificar un atributo de la misma forma que se haria en HTML. Los valores de los props pueden ser strings o cualquier tipo de dato que sea devuelto por una expresion. < C o m p o n e n t d a t a = { { n a m e : ' j o h n ' } } e n a b l e d > < C h i l d t y p e = " e x a m p l e " c o u n t = { 2 } e n a b l e d = { i s E n a b l e d } / > < / C o m p o n e n t >
redibujara todos los componentes hijos. Para cada componente hijo recalculará y le pasará sus correspondientes props actualizadas. React: props Existen props especiales como className (reemplaza a class de HTML) y style, ambas son utilizadas en relacion a CSS.
de la necesidad de mantener un estado. El estado puede ser tan simple como abierto/cerrado o tan complejo como el modelo de datos de una entidad especifica. React: estado local React ofrece una manera de definir y actualizar el estado de un componente. Cuando el estado es modificado, React llama al método render() el cual redibuja el DOM teniendo en cuenta el nuevo estado. Es completamente posible acceder al estado dentro de la definicion del layout de un componente (JSX). Actualizar el estado dentro del método render causaría un loop infinito.
boton. React: estado local i m p o r t R e a c t f r o m ' r e a c t ' ; c l a s s T e s t e x t e n d s R e a c t . C o m p o n e n t { s t a t e = { c o u n t : 0 } h a n d l e C l i c k = ( ) = > { t h i s . s e t S t a t e ( { c o u n t : t h i s . s t a t e . c o u n t + 1 } ) ; } r e n d e r ( ) { r e t u r n ( < d i v > C o u n t : { t h i s . s t a t e . c o u n t } < b u t t o n o n C l i c k = { t h i s . h a n d l e C l i c k } > C l i c k < / b u t t o n > < / d i v > ) ; } } e x p o r t d e f a u l t T e s t ;
introducción a lifecycle methods i m p o r t R e a c t f r o m ' r e a c t ' ; c l a s s T e s t e x t e n d s R e a c t . C o m p o n e n t { s t a t e = { n a m e : n u l l } c o m p o n e n t D i d M o u n t ( ) { f e t c h ( ' h t t p s : / / p o k e a p i . c o / a p i / v 2 / p o k e m o n / 1 ' ) . t h e n ( r e s p o n s e = > r e s p o n s e . j s o n ( ) ) . t h e n ( r e s u l t = > { t h i s . s e t S t a t e ( { n a m e : r e s u l t . s p e c i e s . n a m e } ) } ) . c a t c h ( e r r = > c o n s o l e . e r r o r ( e r r ) ) ; } r e n d e r ( ) { r e t u r n ( < d i v > { t h i s . s t a t e . n a m e | | ' L o a d i n g . . . ' } < / d i v > ) ; }