React (biblioteca de JavaScript)


De Wikipedia, la enciclopedia libre
  (Redirigido desde React (marco web) )
Saltar a navegación Saltar a búsqueda

React (también conocido como React.js o ReactJS ) es una biblioteca de JavaScript de front-end gratuito y de código abierto [3] para construir interfaces de usuario o componentes de UI. Es mantenido por Facebook y una comunidad de desarrolladores y empresas individuales. [4] [5] [6] React se puede utilizar como base en el desarrollo de aplicaciones móviles o de una sola página . Sin embargo, React solo se ocupa de la administración del estado y la representación de ese estado en el DOM , por lo que la creación de aplicaciones React generalmente requiere el uso de bibliotecas adicionales para el enrutamiento, así como ciertas funciones del lado del cliente. [7]

Uso básico

El siguiente es un ejemplo rudimentario del uso de React en HTML con JSX y JavaScript.

< div  id = "myReactApp" > </ div >< script  type = "text / babel" > función  Greeter ( apoyos )  { return  < h1 > { props . saludo } < / h1>; } dejó  App  =  < Greeter  saludo = "Hello World!"  /> ; ReactDOM . render ( Aplicación ,  documento . getElementById ( 'myReactApp' ));</ script >

La Greeterfunción es un componente de React que acepta una propiedad greeting. La variable Appes una instancia del Greetercomponente donde greetingse establece la propiedad 'Hello World!'. El ReactDOM.rendermétodo luego representa nuestro componente Greeter dentro del elemento DOM con id myReactApp.

Cuando se muestra en un navegador web, el resultado será

< div  id = "myReactApp" >  < h1 > ¡Hola, mundo! </ h1 > </ div >

Características notables

Componentes

El código de React está formado por entidades llamadas componentes. Los componentes se pueden representar en un elemento particular en el DOM usando la biblioteca React DOM. Al renderizar un componente, se pueden pasar valores que se conocen como "props": [8]

ReactDOM . render ( < Greeter  saludo = "Hello World!"  /> ,  documento . getElemenById ( 'myReactApp' ));

Las dos formas principales de declarar componentes en React son a través de componentes de función y componentes basados ​​en clases.

Componentes funcionales

Los componentes de la función se declaran con una función que luego devuelve algo de JSX.

const  Greeter  =  ( props )  =>  < div > Hola ,  { props . nombre } ! < / div>;

Componentes basados ​​en clases

Los componentes basados ​​en clases se declaran utilizando clases ES6 .

class  ParentComponent  extiende  React . Componente  {  estado  =  {  color :  'verde'  };  render ()  {  return  (  < ChildComponent  color = { this . state . color }  />  );  } }

DOM virtual

Otra característica notable es el uso de un modelo de objeto de documento virtual , o DOM virtual. Reaccionar crea una en memoria caché de estructuras de datos, calcula las diferencias resultantes, y luego actualiza mostrado DOM del navegador de manera eficiente. [9] Este proceso se llama reconciliación . Esto permite al programador escribir código como si toda la página se representara en cada cambio, mientras que las bibliotecas de React solo representan los subcomponentes que realmente cambian. Esta representación selectiva proporciona un importante impulso al rendimiento. [ cita requerida ] Ahorra el esfuerzo de recalcular el estilo CSS, el diseño de la página y la representación de toda la página. [ cita requerida ]

Métodos de ciclo de vida

Los métodos de ciclo de vida utilizan una forma de enlace que permite la ejecución de código en puntos establecidos durante la vida útil de un componente.

  • shouldComponentUpdate permite al desarrollador evitar la renderización innecesaria de un componente devolviendo false si no se requiere una renderización.
  • componentDidMountse llama una vez que el componente se ha "montado" (el componente se ha creado en la interfaz de usuario, a menudo asociándolo con un nodo DOM ). Esto se usa comúnmente para activar la carga de datos desde una fuente remota a través de una API .
  • componentWillUnmountse llama inmediatamente antes de que el componente sea desmontado o "desmontado". Esto se usa comúnmente para borrar las dependencias del componente que exigen recursos y que no se eliminarán simplemente con el desmontaje del componente (p. Ej., Eliminar cualquier setInterval()instancia que esté relacionada con el componente o un " eventListener " establecido en el "documento" porque de la presencia del componente)
  • renderes el método de ciclo de vida más importante y el único requerido en cualquier componente. Por lo general, se llama cada vez que se actualiza el estado del componente, lo que debe reflejarse en la interfaz de usuario.

JSX

JSX, o JavaScript XML , es una extensión de la sintaxis del lenguaje JavaScript. [10] De apariencia similar a HTML, JSX proporciona una forma de estructurar la representación de componentes utilizando una sintaxis familiar para muchos desarrolladores. Los componentes de React generalmente se escriben usando JSX, aunque no es necesario (los componentes también pueden estar escritos en JavaScript puro). JSX es similar a otra sintaxis de extensión creada por Facebook para PHP llamada XHP .

Un ejemplo de código JSX:

La  aplicación de  clase extiende  React . Componente  { render ()  { retorno  ( < div > < p > Encabezado < / p> < p > Contenido < / p> < p > Pie de página < / p> < / div> ); }}

Arquitectura más allá de HTML

La arquitectura básica de React se aplica más allá de la representación de HTML en el navegador. Por ejemplo, Facebook tiene gráficos dinámicos que se procesan en <canvas>etiquetas, [11] y Netflix y PayPal utilizan la carga universal para generar HTML idéntico tanto en el servidor como en el cliente. [12] [13]

Reaccionar ganchos

Los enganches son funciones que permiten a los desarrolladores "conectarse" al estado de React y a las características del ciclo de vida de los componentes de la función. [14] Los Hooks no funcionan dentro de las clases, te permiten usar React sin clases. [15]

Reaccionar proporciona algunos ganchos incorporados como useState, [16] useContext , useReducer, useMemoy useEffect. [17] Otros están documentados en la Referencia de API de Hooks. [18] useState , useReducery useEffect, que son los más utilizados, son para controlar el estado y los efectos secundarios, respectivamente.

Reglas de ganchos

Hay reglas de los ganchos [19] que describen el patrón de código característico en el que se basan los ganchos. Es la forma moderna de manejar el estado con React.

  1. Los ganchos solo deben llamarse en el nivel superior (no dentro de los bucles o declaraciones if).
  2. Los ganchos solo deben llamarse desde componentes de la función React, no funciones normales o componentes de clase

Aunque estas reglas no se pueden hacer cumplir en tiempo de ejecución, las herramientas de análisis de código como linters se pueden configurar para detectar muchos errores durante el desarrollo. Las reglas se aplican tanto al uso de hooks como a la implementación de hooks personalizados, [20] que pueden llamar a otros hooks.

Modismos comunes

React no intenta proporcionar una "biblioteca de aplicaciones" completa. Está diseñado específicamente para crear interfaces de usuario [3] y, por lo tanto, no incluye muchas de las herramientas que algunos desarrolladores pueden considerar necesarias para crear una aplicación. Esto permite la elección de las bibliotecas que prefiera el desarrollador para realizar tareas como realizar el acceso a la red o el almacenamiento de datos local. Los patrones comunes de uso han surgido a medida que la biblioteca madura.

Flujo de datos unidireccional

Para respaldar el concepto de React de flujo de datos unidireccional (que podría contrastarse con el flujo bidireccional de AngularJS ), la arquitectura Flux se desarrolló como una alternativa a la popular arquitectura modelo-vista-controlador . Flux presenta acciones que se envían a través de un despachador central a una tienda , y los cambios en la tienda se propagan de regreso a la vista. [21] Cuando se usa con React, esta propagación se logra a través de las propiedades de los componentes. Desde su concepción, Flux ha sido reemplazado por bibliotecas como Redux y MobX. [22]

El flujo se puede considerar una variante del patrón del observador . [23]

Un componente de React bajo la arquitectura Flux no debe modificar directamente ningún accesorio que se le pase, sino que se le deben pasar funciones de devolución de llamada que crean acciones que son enviadas por el despachador para modificar la tienda. La acción es un objeto cuya responsabilidad es describir lo que ha ocurrido: por ejemplo, una acción que describe a un usuario "siguiendo" a otro podría contener una identificación de usuario, una identificación de usuario objetivo y el tipo USER_FOLLOWED_ANOTHER_USER. [24] Las tiendas, que pueden considerarse modelos, pueden modificarse en respuesta a las acciones recibidas del despachador.

Este patrón a veces se expresa como "las propiedades fluyen hacia abajo, las acciones fluyen hacia arriba". Se han creado muchas implementaciones de Flux desde sus inicios, quizás la más conocida sea Redux , que presenta una sola tienda, a menudo llamada una sola fuente de verdad . [25]

Desarrollo futuro

El estado del proyecto se puede rastrear a través del foro de discusión del equipo central. [26] Sin embargo, los cambios importantes en React pasan por los problemas del repositorio Future of React y las solicitudes de extracción . [27] [28] Esto permite a la comunidad React proporcionar comentarios sobre nuevas características potenciales, API experimentales y mejoras de sintaxis de JavaScript.

Historia

React fue creado por Jordan Walke, un ingeniero de software de Facebook, quien lanzó un primer prototipo de React llamado "FaxJS". [29] [30] Fue influenciado por XHP , una biblioteca de componentes HTML para PHP . Se implementó por primera vez en el News Feed de Facebook en 2011 y luego en Instagram en 2012. [31] Fue de código abierto en JSConf US en mayo de 2013. [30]

React Native , que permite el desarrollo nativo de Android , iOS y UWP con React, fue anunciado en la React Conf de Facebook en febrero de 2015 y de código abierto en marzo de 2015.

El 18 de abril de 2017, Facebook anunció React Fiber, un nuevo conjunto de algoritmos internos para renderizado, a diferencia del antiguo algoritmo de renderizado de React, Stack. [32] React Fiber se convertiría en la base de cualquier mejora futura y desarrollo de funciones de la biblioteca React. [33] [ necesita actualización ] La sintaxis real para programar con React no cambia; sólo ha cambiado la forma en que se ejecuta la sintaxis. [34]El antiguo sistema de renderizado de React, Stack, se desarrolló en un momento en que no se entendía el enfoque del sistema en el cambio dinámico. Stack fue lento para dibujar animaciones complejas, por ejemplo, tratando de lograrlo todo en un solo fragmento. La fibra divide la animación en segmentos que se pueden distribuir en varios fotogramas. Asimismo, la estructura de una página se puede dividir en segmentos que se pueden mantener y actualizar por separado. Las funciones de JavaScript y los objetos DOM virtuales se denominan "fibras", y cada uno puede operarse y actualizarse por separado, lo que permite una representación en pantalla más fluida. [35]

El 26 de septiembre de 2017, React 16.0 se lanzó al público. [36]

El 16 de febrero de 2019, React 16.8 se lanzó al público. [37] El lanzamiento introdujo React Hooks. [38]

El 10 de agosto de 2020, el equipo de React anunció el primer candidato de lanzamiento para React v17.0, notable como el primer lanzamiento importante sin cambios importantes en la API orientada al desarrollador de React. [39]

Licencia

El lanzamiento público inicial de React en mayo de 2013 utilizó Apache License 2.0 . En octubre de 2014, React 0.12.0 reemplazó esto con la licencia BSD de 3 cláusulas y agregó un archivo de texto PATENTES separado que permite el uso de cualquier patente de Facebook relacionada con el software: [40]

La licencia otorgada en virtud del presente terminará, automáticamente y sin previo aviso, para cualquier persona que haga cualquier reclamo (incluso mediante la presentación de una demanda, afirmación u otra acción) alegando (a) una infracción directa, indirecta o contributiva o un incentivo para infringir cualquier patente: (i ) por Facebook o cualquiera de sus subsidiarias o afiliadas, ya sea que dicho reclamo esté relacionado o no con el Software, (ii) por cualquier parte si dicho reclamo surge en su totalidad o en parte de cualquier software, producto o servicio de Facebook o cualquiera de sus subsidiarias o afiliadas, ya sea que dicha reclamación esté o no relacionada con el Software, o (iii) por cualquier parte relacionada con el Software; o (b) que cualquier derecho en cualquier reclamo de patente de Facebook es inválido o inaplicable.

Esta cláusula poco convencional provocó cierta controversia y debate en la comunidad de usuarios de React, porque podría interpretarse que faculta a Facebook para revocar la licencia en muchos escenarios, por ejemplo, si Facebook demanda al titular de la licencia y lo impulsa a tomar "otra acción" mediante la publicación de la acción. en un blog o en otro lugar. Muchos expresaron su preocupación de que Facebook podría explotar injustamente la cláusula de rescisión o que la integración de React en un producto podría complicar la futura adquisición de una empresa de nueva creación. [41]

Según los comentarios de la comunidad, Facebook actualizó la concesión de la patente en abril de 2015 para que fuera menos ambigua y más permisiva: [42]

La licencia otorgada a continuación terminará, automáticamente y sin previo aviso, si usted (o cualquiera de sus subsidiarias, afiliadas corporativas o agentes) inicia directa o indirectamente, o tiene un interés financiero directo en, cualquier Afirmación de Patente: (i) contra Facebook o cualquier de sus subsidiarias o afiliadas corporativas, (ii) contra cualquier parte si dicha afirmación de patente surge en su totalidad o en parte de cualquier software, tecnología, producto o servicio de Facebook o cualquiera de sus subsidiarias o afiliadas corporativas, o (iii) contra cualquier parte relacionados con el Software. [...] Una "afirmación de patente" es cualquier demanda u otra acción que alegue una infracción directa, indirecta o contributiva o un incentivo para infringir cualquier patente, incluida una contrademanda o contrademanda. [43]

La Apache Software Foundation consideró que este acuerdo de licencia es incompatible con sus políticas de licencia, ya que "transfiere el riesgo a los consumidores intermedios de nuestro software desequilibrado a favor del licenciante, no al licenciatario, lo que infringe nuestra política legal de Apache de ser un donante universal. "y" no son un subconjunto de los que se encuentran en [Apache License 2.0], y no se pueden sublicenciar como [Apache License 2.0] ". [44] En agosto de 2017, Facebook desestimó las preocupaciones posteriores de la Fundación Apache y se negó a reconsiderar su licencia. [45] [46] Al mes siguiente, WordPress decidió cambiar sus proyectos Gutenberg y Calypso de React. [47]

El 23 de septiembre de 2017, Facebook anunció que la semana siguiente volvería a licenciar Flow, Jest , React e Immutable.js bajo una licencia MIT estándar ; la empresa afirmó que React era "la base de un amplio ecosistema de software de código abierto para la web" y que no querían "frenar el progreso por razones no técnicas". [48]

El 26 de septiembre de 2017, se lanzó React 16.0.0 con la licencia MIT. [49] El cambio de licencia del MIT también se ha actualizado a la línea de lanzamiento 15.x con React 15.6.2. [50]

Ver también

  • Reaccionar nativo
  • AngularJS
  • Angular
  • Backbone.js
  • Ember.js
  • Esbelto
  • Vue.js
  • Comparación de bibliotecas de JavaScript
  • Componentes Web

Referencias

  1. ^ Occhino, Tom; Walke, Jordan. "Aplicaciones JS en Facebook" . YouTube . Consultado el 22 de octubre de 2018 .
  2. ^ "Versión 17.0.2" . Consultado el 10 de abril de 2021 .
  3. ^ a b "React: una biblioteca de JavaScript para crear interfaces de usuario" . Reaccionar . Consultado el 7 de abril de 2018 .
  4. ^ Krill, Paul (15 de mayo de 2014). "Reaccionar: hacer interfaces de usuario más rápidas y fluidas para aplicaciones web basadas en datos" . InfoWorld .
  5. ^ Hemel, Zef (3 de junio de 2013). "La biblioteca de interfaces de usuario de React JavaScript de Facebook recibe críticas mixtas" . InfoQ .
  6. ^ Dawson, Chris (25 de julio de 2014). "Historia de JavaScript y cómo condujo a ReactJS" . La nueva pila .
  7. Dere, Mohan (19 de febrero de 2018). "Cómo integrar create-react-app con todas las bibliotecas que necesitas para hacer una gran aplicación" . freeCodeCamp . Consultado el 14 de junio de 2018 .
  8. ^ "Componentes y accesorios" . Reaccionar . Facebook . Consultado el 7 de abril de 2018 .
  9. ^ "Refs y el DOM" . React Blog .
  10. ^ "Borrador: especificación JSX" . JSX . Facebook . Consultado el 7 de abril de 2018 .
  11. ^ "¿Por qué creamos React? - Blog React" .
  12. ^ "Reacción isomórfica de PayPal" . Archivado desde el original el 8 de febrero de 2019.
  13. ^ "Reacción isomórfica de Netflix" .
  14. ^ "Ganchos de un vistazo - Reaccionar" . reactjs.org . Consultado el 8 de agosto de 2019 .
  15. ^ "¿Qué diablos es React Hooks?" . Soshace . 2020-01-16 . Consultado el 24 de enero de 2020 .
  16. ^ "Usando el gancho de estado - Reaccionar" . reactjs.org . Consultado el 24 de enero de 2020 .
  17. ^ "Uso del gancho de efectos - Reaccionar" . reactjs.org . Consultado el 24 de enero de 2020 .
  18. ^ "Referencia de la API de Hooks - Reaccionar" . reactjs.org . Consultado el 24 de enero de 2020 .
  19. ^ "Reglas de ganchos - Reaccionar" . reactjs.org . Consultado el 24 de enero de 2020 .
  20. ^ "Construyendo sus propios ganchos - Reaccionar" . reactjs.org . Consultado el 24 de enero de 2020 .
  21. ^ "Vista general en profundidad" . Flux . Facebook . Consultado el 7 de abril de 2018 .
  22. ^ "Flux Release 4.0" . Github . Consultado el 26 de febrero de 2021 .
  23. ^ Johnson, Nicholas. "Introducción a Flux - Ejercicio de reacción" . Nicholas Johnson . Consultado el 7 de abril de 2018 .
  24. ^ Abramov, Dan. "La historia de React y Flux con Dan Abramov" . Tres desarrolladores y un quizás . Consultado el 7 de abril de 2018 .
  25. ^ "Herramientas de gestión del estado - Resultados" . El estado de JavaScript . Consultado el 7 de abril de 2018 .
  26. ^ "Notas de la reunión" . Reaccionar Discutir . Consultado el 13 de diciembre de 2015 .
  27. ^ "reactjs / react-future - El futuro de React" . GitHub . Consultado el 13 de diciembre de 2015 .
  28. ^ "facebook / react - Problemas con la solicitud de funciones" . GitHub . Consultado el 13 de diciembre de 2015 .
  29. ^ Walke, Jordania. "FaxJS" . Consultado el 11 de julio de 2019 .
  30. ↑ a b Papp, Andrea (4 de abril de 2018). "La historia de React.js en una línea de tiempo" . RisingStack . Consultado el 11 de julio de 2019 .
  31. ^ "Pete Hunt en TXJS" .
  32. ^ Frederic Lardinois (18 de abril de 2017). "Facebook anuncia React Fiber, una reescritura de su biblioteca React" . TechCrunch . Consultado el 19 de abril de 2017 .
  33. ^ "Arquitectura de fibra de reacción" . Github . Consultado el 19 de abril de 2017 .
  34. ^ "Facebook anuncia React Fiber, una reescritura de su marco React" . TechCrunch . Consultado el 19 de octubre de 2018 .
  35. ^ "GitHub - acdlite / react-fiber-architecture: una descripción del nuevo algoritmo central de React, React Fiber" . github.com . Consultado el 19 de octubre de 2018 .
  36. ^ "Reaccionar v16.0" . react.js. 2017-09-26 . Consultado el 20 de mayo de 2019 .
  37. ^ "Reaccionar v16.8" . react.js. 2019-02-16 . Consultado el 20 de mayo de 2019 .
  38. ^ "Presentación de ganchos" . react.js . Consultado el 20 de mayo de 2019 .
  39. ^ url = https://reactjs.org/blog/2020/08/10/react-v17-rc.html
  40. ^ "Reaccionar CHANGELOG.md" . GitHub .
  41. ^ Liu, Austin. "Una razón de peso para no usar ReactJS" . Medio .
  42. ^ "Actualización de nuestra concesión de patente de código abierto" .
  43. ^ "Concesión adicional de derechos de patente versión 2" . GitHub .
  44. ^ "Preguntas legales previamente formuladas sobre ASF" . Fundación de software Apache . Consultado el 16 de julio de 2017 .
  45. ^ "Explicando la licencia de React" . Facebook . Consultado el 18 de agosto de 2017 .
  46. ^ "Considere volver a licenciar a AL v2.0, como acaba de hacer RocksDB" . Github . Consultado el 18 de agosto de 2017 .
  47. ^ "WordPress para deshacerse de la biblioteca React sobre el riesgo de cláusula de patente de Facebook" . TechCrunch . Consultado el 16 de septiembre de 2017 .
  48. ^ "Reactivar, bromear, fluir e inmutable.js" . Código de Facebook . 2017-09-23.
  49. ^ Clark, Andrew (26 de septiembre de 2017). "React v16.0§ con licencia MIT" . React Blog .
  50. ^ Hunzaker, Nathan (25 de septiembre de 2017). "Reaccionar v15.6.2" . React Blog .

enlaces externos

  • Página web oficial
Obtenido de " https://en.wikipedia.org/w/index.php?title=React_(JavaScript_library)&oldid=1043520972 "