Que Es React Js
Que Es React Js
React js es una biblioteca desarrollada por facebook y sirve para hacer interfaces de usuario de una
manera sencilla, declarativa y basada en componentes.
Lo puedes comenzar a usar tanto en un proyecto ya iniciado como en uno nuevo desde cero, sea
desde agregar elementos simples (como un botón) hasta una app robusta y compleja con mucha
interacción y dinamismo.
A continuación tienes un vistazo general de las principales características y casos de uso prácticos
para que puedas tener una idea clara de qué y cómo puedes sacar provecho a react js.
Ya sea que estés aprendiendo para Aplicar a entrevistas de React JS o por simple curiosidad, ¡estoy
seguro que esta guía te va a servir!
Por cierto, si quieres romperla de verdad con React JS, entonces ¡Suscríbete al Canal de YouTube
de Developero donde encontrarás mucho más contenido de calidad como éste!
Tabla de contenidos
React y jsx
Jsx if y else
Jsx y atributos
React components
Renderizar componentes
React Props
React list
React js formularios
React hooks
Siguientes pasos.
En esta sección vas a aprender los conceptos básicos de react js. Si nunca has usado react, esta
sección es tu punto de partida, iremos paso a paso para que nuestras bases sean muy sólidas y
podamos pasar al siguiente nivel.
React y jsx
Jsx es una sintaxis que nos permite escribir componentes de react de una manera más declarativa.
Todos los ejemplos que veremos en este apartado son definiciones de componentes en React.
Profundizaremos más sobre los componentes en los siguientes apartados.
Parece HTML, pero en realidad es Javascript. Lo que estamos indicando aquí es: Crea en la interfaz
de usuario un elemento h1 cuyo contenido sea “Componente declarado con JSX”.
Pero el navegador no sabe cómo interpretar la sintaxis de JSX. Por lo tanto, recurrimos a
herramientas como webpack y babel para que nos transforme nuestro código en JSX en una
sintaxis que el navegador si pueda reconocer.
// equivale a
const myComponent = () => React.createElement('h1', null, 'Componente declarado con JSX')
No es obligatorio usar React con JSX pero es lo recomendado debido a que nos simplifica bastante
el código que tenemos que escribir para declarar nuestros componentes.
Tips:
Usa jsx como estándar en tus proyectos debido a que es lo más popular cuando veas el código de
terceros, documentación y tutoriales.
Ya que Jsx es javascript puro, es posible ejecutar expresiones de javascript dentro del mismo.
1+1
‘hello’
5>4
Como puedes apreciar, para colocar expresiones se hace entre llaves ().
Tips:
Utiliza expresiones de javascript para aplicar lógica en jsx. De esto veremos más adelante.
Jsx if y else
if (name) {
} else {
return <h1>Hello?</h1>
En este ejemplo, estamos pasando por parámetro la variable name y en la condición mostramos un
mensaje u otro según si name tiene valor o no.
Jsx y atributos
Ya que usamos Jsx para declarar elementos a mostrar en el navegador, también podemos
especificar los atributos de dichos elementos.
// equivalente transpilado
'div',
id: 'element',
},
'Mi elemento'
Como puedes ver, nos resulta muy familiar la sintaxis de Jsx pero recuerda que Jsx es javascript
puro, no html, es por ello que he colocado el equivalente transpilado.
Otros ejemplos.
Tips:
Usa llaves para valores diferentes a una cadena como un número, una función, propiedad de un
objeto, etc.
return (
<div>
<h1>{post.title}</h1>
<h2>post.subtitle</h2>
</div>
}
En este ejemplo estamos colocando elementos h1 y h2 de manera normal, pero nota que el img no
tiene una etiqueta de cierre. Esto es debido a que no es necesario declararla porque no vamos a
definir ningún valor.
Tips:
Solo coloca etiquetas de cierre cuando realmente sean necesarias. Es válido que una etiqueta se
cierre del tipo <img /> en lugar de <img></img>
React components
Es aislado.
Reusable.
Una analogía de los componentes son las piezas de lego. Una pieza de lego es independiente,
reusable y tiene su propia estructura (forma y color).
Un componente puede estar constituido por una o más unidades llamadas elementos. Por
ejemplo, el div, img, span, p, h1, todos estos son elementos.
Y con jsx, podemos usar tanto elementos como componentes definidos por nosotros.
return (
<header>
<Title />
</header>
)
Tips:
Define tus componentes siempre con letra mayúscula, esto le indica a React que es un
componente y no un elemento html como un div, img, etc. Ejemplo: React va a tratar a div como
un elemento html mientras que Title como un componente.
Por último, los dos tipos irreductibles de componentes básicos de React son:
A partir de estos dos tipos de componentes, existen más categorías que veremos en la parte de
Tipos de componentes.
// componente funcional
// componente de clase
render() {
Renderizar componentes
La manera de renderizar un componente en una aplicación es por medio de una utilidad llamada
ReactDOM.
render acepta dos parámetros: un componente y el lugar del DOM donde queremos que se monte.
Tips:
Si estás creando una app de React desde cero, define un solo render para tu app.
Si estás integrando React a una app existente, es válido y común que existan varios render con
diferentes divs e ids.
React Props
También podemos hacer una analogía de los componentes como una función.
Las funciones puras son aquellas que dados los mismos parámetros, obtendremos siempre el
mismo output o resultado. Ejemplo: F (x) = x + 1, significa que si x es igual a 10, entonces siempre
obtendremos 11 de resultado (se le suma más uno a x).
Las funciones dinámicas son aquellas que dados los mismos parámetros, no siempre obtendremos
el mismo resultado. Ejemplo: una función que ejecute Date, Math.rand (para obtener números
random), llamadas a una api externa (puede retornar errores de servidor), etc.
Si queremos saludar a un usuario con otro nombre, no vamos a crear otro componente. Imagina
tener 1000 usuarios con diferentes nombres, crear 1000 componentes solo para eso no es para
nada óptimo.
Lo que hacemos es crear un solo componente que nos permita pasar por parámetro el valor que
deseemos.
// implementación
Este ejemplo de componente es como una función pura debido a que dado el mismo parámetro,
siempre obtendremos el mismo resultado.
Pues bien, los props es un objeto de javascript que es pasado como un parámetro a un
componente tal y como lo hicimos en el ejemplo anterior. Props viene de properties o
propiedades.
Tips:
Los props son solo de lectura, esto significa que no debes cambiarles su valor.
Ya que props es un objeto, puedes lo puedes desestructurar del modo: const MyComp = ({ name })
=> <h1>{name}</h1>.
Los valores de los props pueden ser: un objeto, array, cadena, número, función, incluso
componentes o elementos. También hay un prop especial llamado children que es el contenido
hijo de un componente, ejemplo: <Title>Mi título <Title />, accederias: const Title = (props) =>
<h1>{props.children}</h1> donde children es igual a “Mi título”.
Existe una herramienta llamada prop-types qué nos sirve para validar el tipado de los props que
recibe un componente, úsala siempre.
A diferencia de los props que son solo de lectura y no pueden ser modificados por el componente
directamente, el estado es un valor que si es controlado por el componente y es modificado por el
mismo.
Actualmente existen dos maneras de definir el estado: Por medio del hook useState (lo verás en la
parte de react hooks, useState) Por medio de componentes definidos con clases de ES6 (lo verás
más a detalle en la parte de tipos de componentes).
Vamos a ver un ejemplo de un componente que actualizará estado cada segundo solo como
ejemplo.
constructor(props) {
super(props)
// definimos el estado como un objeto que tiene solo una propiedad (pero no es limitado a una)
this.state = {
counter: 0,
// este método es obligatorio para componentes tipo clase y debe retornar un elemento válido
render() {
Corriendo el ejemplo anterior, vamos a notar que el componente actualiza el contador de manera
correcta!
Tips:
Por performance, internamente React puede agrupar varias llamadas de setState, por lo que
this.setState({ counter: this.state.counter + 1 }) podría tener una version del estado counter
diferente al que esperamos. Para solucionar lo anterior, setState acepta una función como primer
argumento en lugar de un objeto: this.setState((state) => ({ counter: state.counter + 1 })).
Las actualizaciones del estado se fusionan. Ejemplo: puedes tener tu estado como this.state =
{ valueA: ‘’, valueB: ‘’ }, si haces this.setState({ valueA: ‘some’ }) React va actualizar solamente
valueA pero dejará intacto a valueB.
Una gran diferencia entre un componente de tipo clase y uno de tipo function es que en el de tipo
clase nos da acceso a unos métodos reservados que nos permiten acceder al ciclo de vida del
componente.
Nota: en la parte de React hooks veremos cómo podemos replicar el mismo comportamiento en
componentes de tipo function.
constructor(props) {
super(props);
this.state = {
name: '',
};
console.log(‘constructor’);
componentDidMount() {
console.log('componentDidMount')
componentWillUnmount() {
console.log('componentWillUnmount')
}
componentDidUpdate() {
console.log('componentDidUpdate')
render() {
return (<h1>{this.state.name}</h1>);
Al ejecutar este código, veremos los console logs en la consola del navegador.
Sin embargo, es válido asignar al state el valor de un prop si tu intención es asignar un valor inicial
o default. this.state = { name: props.initialName } tiene mas sentido.
Tips en componentDidMount:
Es el lugar adecuado para llamadas a apis. Ejemplo: cuando consumes una api para cargar y
mostrar los datos en tu componente.
Tips en componentDidUpdate:
Buen lugar para optimizar las llamadas a apis solo si es realmente necesario.
Incluso si aqui actualizas el estado, este método se volverá a ejecutar. Para evitar loops infinitos de
actualizaciones, coloca una condición antes de actualizar el estado.
Tips en componentWillUnmount:
Buen lugar para limpiar las suscripciones que hayas hecho en componentDidMount.
No llames setState aquí debido a que el componente será desmontado y no seguirá existiendo.
React list
La manera de renderizar un listado de elementos en react es por medio de arrays y el método map
(propio del prototype de Array de javascript).
return (
<ul>
{names.map((name) => (
<li>{name}</li>
))}
</ul>
Esto es debido a que necesitamos proporcionar el prop key en los elementos de la lista, en este
caso, los <li>.
return (
<ul>
{names.map((name) => (
<li key={name}>{name}</li>
))}
</ul>
Las keys existen para indicarle a React qué elementos han cambiado, han sido agregados o han
sido removidos.
También puedes asignar el resultado de un map a una variable y luego usar esa variable para
renderizar el contenido:
return <ul>{listNames}</ul>
}
Recordemos que jsx nos permite usar expresiones de javascript.
Tips:
Cuando hagas listas de elementos (independientemente de que los elementos sean li, p, h1,
componentes, etc;) siempre proporciona el prop key.
Si los datos que estas listando provienen de una api, por lo común tendrán una propiedad de id,
ese lo puedes usar como valor de key. Ejemplo: values: [{ id: 1, name: ‘john’ }, { id: 2, name
‘joana’ }].
React js formularios
La manera básica y más común de manejar formularios en React consiste en hacer formularios
controlados.
Un formulario controlado consiste en un formulario cuyos valores y eventos son controlados por
React.
Vamos a ver un ejemplo de un formulario que no está siendo controlado por React y después
vamos a controlarlo progresivamente.
return (
<form>
<label>
Name:
</label>
</form>
}
Hasta aquí nada nuevo, esto tiene el comportamiento por default de un formulario en html.
Para controlar los valores del formulario, necesitamos usar el estado del componente. En este
ejemplo, va a ser con un componente de tipo clase.
constructor(props) {
super(props)
this.state = {
name: '',
render() {
return (
<form>
<label>
Name:
</label>
</form>
Vamos a notar que cuando escribimos en el input, no actualiza ningún valor. Incluso en la consola
marca warning:
Failed prop type: You provided a value prop to a form field without an onChange handler. This will
render a read-only field. If the field should be mutable use defaultValue. Otherwise, set either
onChange or readOnly.
Necesitamos agregar un manejador del evento change en el input para que se actualice el estado.
constructor(props) {
super(props)
this.state = {
name: '',
e.preventDefault()
alert(Object.values(this.state))
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
</label>
<input type="submit" value="Submit" />
</form>
onChange es el manejador del evento change del input y cuando el usuario modifique el valor del
mismo, va a ejecutar el callback que en este caso es this.handleChange.
Ya que es un manejador de evento, recibe por valor el objeto event que contiene todo lo relativo al
evento desencadenado. En este caso, el objeto event tiene una propiedad target que a su vez es un
objeto que tiene la propiedad value.
Para el evento submit usamos this.handleSubmit. En este caso ejecutamos e.preventDefault, una
función del objeto event para prevenir que se ejecute el comportamiento default (recargar la
página). Después ejecutamos un alert con los valores del estado.
constructor(props) {
super(props)
this.state = {
name: '',
address: '',
age: '',
}
handleChange = (e) => {
e.preventDefault()
alert(Object.values(this.state))
render() {
return (
<form onSubmit={this.handleSubmit}>
<p>
Name:
</p>
<p>
address:
<input
type="text"
name="address"
value={this.state.address}
onChange={this.handleChange}
/>
</p>
<p>
age:
</p>
<input type="submit" value="Submit" />
</form>
Considera:
e.target.name va a ser igual al valor name que tenga el input, lo que equivale a:
Suponiendo que haya sido el input address el que haya sido modificado. Los corchetes es una
manera de indicar la propiedad del objeto.
Entonces, cuando otro input sea cambiado, e.target.name tendra el nombre del input que hizo el
cambio. De esta manera estamos actualizando el estado de manera dinámica.
Tips:
Saca provecho de las propiedades name y value del objeto e.target para actualizar el estado de un
formulario de manera dinámica.
Recuerda que hay eventos (onChange, onSubmit, etc) y manejadores de eventos que son
funciones donde nosotros colocamos la lógica de lo que queremos hacer con el formulario.
En la parte de React hooks vamos a ver este mismo ejemplo pero usando los hooks de react.
De tipo clase.
De tipo function.
React provee dos tipos de componentes a elegir al momento de crear un componente de tipo
clase: Component y PureComponent.
Component es el que permite usar todas las características de React en una clase de javascript
(ES6).
PureComponent es parecido a Component pero internamente usa una optimización para evitar
renders innecesarios.
Hasta antes de la llegada de los hooks de React, a los componentes de tipo clase se les llamaba
state components (componentes de estado) y los de tipo function stateless components
(componentes sin estado).
Sin embargo, actualmente ya no es válida esa separación debido a que un componente tipo
function ya puede tener un estado usando el hook useState.
Los Dumb o presentational components, en pocas palabras, son componentes que sólo presentan
la UI pero no manejan ninguna lógica sobre qué, cómo y cuándo se debe presentar un
componente.
Los Smart components tienen la responsabilidad de manejar toda la lógica de que debe mostrarse,
cómo y cuándo. Pueden tener como hijos a otros smart components y a presentational
components.
Sin embargo, el propio Dan Abramov ha comentado que con la llegada de los hooks ya no es
necesario hacer esta separación.
React hooks
Ahora que tienes las nociones básicas de React JS, entra a este mega post donde te explico todo lo
que necesitas saber sobre los React Hooks.
Siguientes pasos.
¡Felicidades por haber recorrido todo este camino hasta aquí! Ya conoces lo básico de React para
comenzar a crear tus propias aplicaciones.
Puedes usar esto como una guía y regresar para consultar algo cada que lo necesites.
Te recomiendo que comiences a crear apps pequeñas para aplicar y experimentar lo aprendido.
Para ello, es probable que te puedan interesar alguno de mis cursos premium de Udemy donde te
En este curso vas a aprender a Aplicar REALMENTE TDD en React JS moderno (incluyendo hooks)
en tu día a día, Aplicar fuertemente buenas prácticas - Código limpio y refactors en React JS y ver
escenarios de apps reales como son formularios, filtros con paginado, inicio de sesión, llamadas a
APIs y más.
Bienvenido a la guía de React para principiantes. Está diseñada para enseñarte todos los conceptos
básicos de React, que necesitas conocer para empezar a construir aplicaciones React en 2021.
He creado este recurso para ofrecerte el camino más completo y fácil para que logres aprender
React desde cero.
Elementos JSX.
Componentes y Props.
Eventos en React.
Lea esta enorme guía donde mejor le convenga. En el tren, en el escritorio, en la cola... en
cualquier lugar.
Hay un montón de cosas buenas que cubrir, así que vamos a empezar.
Fundamentos de React
React es una biblioteca, hecha en JavaScript y que codificamos en JavaScript, para construir
grandes aplicaciones que se ejecutan en la web.
En otras palabras, es necesario tener una comprensión básica de JavaScript, para convertirse en un
programador sólido de React.
Los conceptos más básicos de JavaScript, con los que deberías estar familiarizado son las variables,
los tipos de datos básicos, los condicionales, los métodos de arreglo, las funciones y los módulos
ES.
¿Cómo puedo aprender todos estos conocimientos de JavaScript? Consulta la guía completa para
aprender todo el JavaScript que necesitas para React.
React fue escrito en JavaScript de abajo hacia arriba, con el propósito expreso de rapidez en la
construcción de aplicaciones web y nos da herramientas para hacerlo.
JavaScript es un lenguaje con más de 20 años de antigüedad, el cual fue creado para añadir
interacciones al navegador a través de scripts y no fue diseñado para crear aplicaciones completas.
En otras palabras, aunque se utilizó JavaScript para crear React, se crearon con fines muy
diferentes.
Sí, puedes incluir cualquier código JavaScript válido en tus aplicaciones React.
Puede utilizar cualquier API del navegador o de la ventana, como la geolocalización o la API fetch.
Además, como React (cuando esto se compila) se ejecuta en el navegador, puedes realizar acciones
comunes de JavaScript como la consulta y manipulación del DOM.
Crear una aplicación React en el ordenador usando una herramienta como Create React App.
¿Cuál es el mejor enfoque para usted? La mejor manera de crear tu aplicación depende de lo que
quieras hacer con ella.
Si, quieres crear una aplicación web completa que quieres empujar en última instancia a la web, lo
mejor es crear esa aplicación React en tu ordenador utilizando una herramienta como Create React
App.
Si, estás interesado en crear aplicaciones React en tu ordenador, consulta la guía completa para
usar Create React App.
La forma más sencilla de crear y construir aplicaciones React para aprender y crear prototipos es
usar una herramienta como CodeSandbox. ¡Puedes crear una nueva aplicación de React en
segundos yendo a react.new!.
Elementos JSX
JSX está pensado para facilitar la creación de interfaces de usuario con aplicaciones JavaScript.
Toma prestada su sintaxis del lenguaje de programación más utilizado: JavaScript mezclado con
HTML. Como resultado, JSX es una potente herramienta para estructurar nuestras aplicaciones.
El ejemplo siguiente, es el ejemplo más básico de un elemento React que muestra el texto "Hola
Mundo":
<div>Hola React!</div>
Ten en cuenta que para ser mostrados en el navegador, los elementos de React necesitan ser
renderizados (usando ReactDOM.render()).
Podemos escribir elementos HTML válidos en JSX, pero lo que difiere ligeramente es la forma en
que se escriben algunos atributos.
Los atributos que constan de varias palabras, son escritos en la sintaxis camelCase (como
className) y tienen nombres diferentes a los del HTML estándar (class).
<div id="cabecera">
</div>
JSX
JSX tiene esta forma diferente de escribir atributos, porque en realidad se hace usando funciones
de JavaScript (hablaremos de esto más adelante).
A diferencia del HTML estándar, los elementos como input, img o br deben cerrarse con una barra
oblicua final para que sean JSX válidos.
Los elementos JSX con dos etiquetas deben tener una etiqueta de cierre
Los elementos que deben tener dos etiquetas, como div, main o button, deben tener su cierre, la
segunda etiqueta en JSX, de lo contrario se producirá un error de sintaxis.
Los estilos en línea se escriben de forma diferente a los del HTML plano.
Los estilos en línea no deben incluirse como una cadena de texto, sino dentro de un objeto.
Una vez más, las propiedades de estilo que utilicemos deben estar escritas en estilo camelCase.
<h1 style={{ color: "blue", fontSize: 22, padding: "0.5em 1em" }}>
Hola React!
</h1>;
Estilos en React
Las propiedades de estilo que aceptan valores en píxeles (como la anchura, la altura, el relleno, el
margen, etc.), pueden utilizar enteros en lugar de cadenas de texto. Por ejemplo, fontSize: 22 en
lugar de fontSize: "22px".
Los nuevos desarrolladores de React pueden preguntarse cómo es de beneficioso que React pueda
utilizar código JavaScript.
Un ejemplo sencillo que oculta o muestra condicionalmente el contenido JSX, es usar cualquier
condicional JavaScript válido, como una sentencia if o switch.
if (isAuthUser) {
} else {
return <button>Ingresar</button>
¿Dónde devolvemos este código? Dentro de un componente React, que cubriremos en una sección
posterior.
JSX no puede ser entendido por el navegador
De hecho, escribir <div>Hola React</div> en JSX no es más que una forma más cómoda y
comprensible de escribir código como el siguiente:
JSX elements
Para escribir JSX y que el navegador entienda esta sintaxis diferente, debemos utilizar un
transpilador para convertir JSX a estas llamadas de función.
Componentes de React
En lugar de limitarse a renderizar uno u otro conjunto de elementos JSX, podemos incluirlos dentro
de componentes React.
Los componentes se crean utilizando lo que parece una función normal de JavaScript, pero es
diferente porque devuelve elementos JSX.
function Saludos() {
Componente React
Los componentes React nos permiten crear lógicas y estructuras más complejas dentro de nuestra
aplicación de React, más de lo que haríamos con elementos JSX solos.
Piensa en los componentes React como nuestros elementos React personalizados, que tienen su
propia funcionalidad.
Como sabemos, las funciones nos permiten crear nuestra propia funcionalidad y reutilizarla donde
queramos en nuestra aplicación.
Los componentes son reutilizables donde queramos en nuestra aplicación y tantas veces como
queramos.
function Saludos() {
Usamos la importación de React para parsear el JSX y ReactDOM para renderizar nuestro
componente en un elemento raíz con el id de "root".
Los componentes pueden devolver elementos JSX válidos, así como cadenas de texto, números,
booleanos, valores null, arreglos y fragmentos.
¿Por qué debemos retornar null? Es común retornar null, si queremos que un componente no
muestre nada.
function Saludos() {
if (isAuthUser) {
} else {
return null;
JavaScript
Otra regla es que los elementos JSX deben estar envueltos en un elemento padre. No se pueden
devolver múltiples elementos hermanos.
Si, necesitas devolver varios elementos, pero no necesitas añadir otro elemento al DOM
(normalmente para un condicional), puedes utilizar un componente especial de React llamado
fragmento(fragment).
Los fragmentos se pueden escribir como <></> o cuando importas React en tu archivo puedes
crear un fragmento con: <React.Fragment></React.Fragment>.
function Saludos() {
if (isAuthUser) {
return (
<>
<button>Salir</button>
</>
);
} else {
return null;
Componente en React
Tenga en cuenta que cuando se intenta devolver un número de elementos JSX que se extienden a
lo largo de varias líneas, podemos devolverlo todo utilizando un conjunto de paréntesis () como se
ve en el ejemplo anterior.
El hecho más importante, es que los componentes pueden devolver otros componentes.
function App() {
return (
<Layout>
<Navbar />
<Main />
<Aside />
<Footer />
</Layout>
);
Esto es poderoso porque estamos usando la personalización de los componentes para describir lo
que son (Ej: Layout) y su función en nuestra aplicación. Esto nos dice cómo deben ser utilizados
con sólo mirar su nombre.
Además, estamos utilizando el poder de JSX para componer estos componentes. En otras palabras,
utilizar la sintaxis de JSX similar a la de HTML para estructurarlos de una manera inmediatamente
comprensible (como si la barra de navegación estuviera en la parte superior de la aplicación, el pie
de página en la parte inferior, y así sucesivamente).
Al igual que podemos utilizar variables de JavaScript dentro de nuestros componentes, también
podemos utilizarlas directamente dentro de nuestro JSX.
Sin embargo, hay algunas reglas básicas para usar valores dinámicos dentro de JSX:
JSX puede aceptar cualquier valor primitivo (cadenas de texto, booleanos, números), pero no
aceptará objetos planos.
Por ejemplo, se pueden incluir condicionales dentro de JSX utilizando el operador ternario, ya que
resuelve a un valor.
function Saludos() {
}
Props en React
Los componentes y variables, estados pueden ser pasados por valores usando props
Los props tienen un aspecto idéntico al de los atributos de los elementos JSX/HTML normales, pero
se puede acceder a sus valores dentro del propio componente.
Los props están disponibles en los parámetros del componente al que se le pasan. Los props
siempre se incluyen como propiedades de un objeto.
ReactDOM.render(
document.getElementById("root")
);
function Saludos(props) {
Componente Saludos
Los props nunca deben ser modificados directamente dentro del componente hijo.
Otra forma de decir esto es que los props nunca deben ser mutados, ya que los props son un
objeto JavaScript simple.
function Header(props) {
props.usuario = "Doug";
Modificar props
Los componentes se consideran funciones puras. Es decir, para cada entrada, deberíamos poder
esperar la misma salida. Esto significa que no podemos mutar el objeto props, sólo leer de él.
Los props children son utiles si queremos pasar elementos / componentes como props a otros
componentes.
Los props children son especialmente utiles, para cuando se quiere que el mismo componente
(como un componente Layout) envuelva a todos los demás componentes.
function Layout(props) {
function IndexPage() {
return (
<Layout>
<Header />
<Hero />
<Footer />
</Layout>
);
function AboutP() {
return (
<Layout>
<About />
<Footer />
</Layout>
);
La ventaja de este patrón es que todos los estilos aplicados al componente Layout serán
compartidos con sus componentes hijos.
¿Cómo mostramos listas en JSX usando datos de arreglos? Utilizamos la función .map() para
convertir listas de datos (arreglos) en listas de elementos.
Puede utilizar .map() para los componentes, asimismo para los elementos JSX simples.
function App() {
return (
<ul>
{personas.map((persona) => (
))}
</ul>
);
}
function Persona({ nombre }) {
Cada elemento React dentro de una lista de elementos necesita un key prop especial.
Las claves son esenciales, para que React pueda hacer un seguimiento de cada elemento sobre el
que se está iterando la función .map().
React utiliza claves (keys) para actualizar elementos individuales, cuando sus datos cambian (en
lugar de volver a renderizar toda la lista).
Las claves deben tener valores únicos, para poder identificar cada una de ellas según su valor clave.
function App() {
const personas = [
];
return (
<ul>
{personas.map((persona) => (
))}
</ul>
);
}
El estado es un concepto que se refiere a cómo cambian los datos de nuestra aplicación a lo largo
del tiempo.
La importancia de los estados en React, es que es una forma de hablar de nuestros datos por
separado de la interfaz de usuario (lo que el usuario ve)..
Hablamos del manejo de estados, porque necesitamos una forma eficaz de mantener un registro y
actualizar los datos de nuestros componentes a medida que nuestro usuario interactúa con ellos.
Para cambiar nuestra aplicación de elementos HTML estáticos a una dinámica con la que el usuario
pueda interactuar, necesitamos estados.
Necesitamos gestionar el estado a menudo, cuando nuestro usuario quiere interactuar con nuestra
aplicación.
Cuando obtenemos datos de una API para mostrarlos al usuario (como las entradas de un blog),
necesitamos guardar esos datos en estados.
Cuando queremos cambiar los datos que un componente recibe de props, usamos el estado para
cambiarlo en lugar de mutar el objeto props.
La forma de "crear" estado en React dentro de un componente particular es con el hook useState.
¿Qué es un hook? Es muy parecido a una función de JavaScript, pero sólo se puede utilizar en un
componente de función de React en la parte superior del componente.
Utilizamos hooks para hacer ciertas características y useState nos da la capacidad de crear y
gestionar el estado.
function Saludos() {
Hola React
¿Cómo funciona useState? Como una función normal, podemos pasarle un valor inicial (como
"Hola React").
Lo que se devuelve de useState es un arreglo. Para acceder a la variable state y su valor, podemos
utilizar el primer valor de ese arreglo: estado[0].
Sin embargo, hay una manera de mejorar la forma en que escribimos esto. Podemos utilizar la
desestructuración de arreglos para acceder directamente a esta variable de estado y llamarla como
queramos, por ejemplo, título.
function Saludo() {
¿Qué pasa si queremos permitir que nuestro usuario actualice el saludo que ve? Si incluimos un
formulario, el usuario puede escribir un nuevo valor. Sin embargo, necesitamos una forma de
actualizar el valor inicial de nuestro título.
function Saludo() {
return (
<div>
<h1>{titulo}</h1>
</div>
);
Podemos hacerlo con la ayuda del segundo elemento del arreglo que devuelve useState. Es una
función setter, a la que podemos pasar el valor que queramos que sea el nuevo estado.
En nuestro caso, queremos obtener el valor que se escribe en el input cuando un usuario está en el
proceso de escribir. Podemos obtenerlo con la ayuda de los eventos de React.
Los eventos son formas de obtener datos sobre una determinada acción que un usuario ha
realizado en nuestra app.
Los props más comunes utilizados para manejar eventos son onClick (para eventos de click),
onChange (cuando un usuario escribe en una entrada) y onSubmit (cuando se envía un
formulario).
Los datos de los eventos se nos dan conectando una función a cada uno de estos puntales
enumerados (Cabe anotar que hay muchos más para elegir que estos tres).
Para obtener datos sobre el evento cuando nuestra entrada es cambiada, podemos añadir
onChange en la entrada y conectarlo a una función que manejará el evento. Esta función se
llamará handleInputChange:
function Saludo() {
function handleInputChange(event) {
return (
<div>
<h1>{titulo}</h1>
<input
placeholder="Actualización titulo"
onChange={handleInputChange}
/>
</div>
);
Evento onChange
Tenga en cuenta que en el código anterior, registrará un nuevo evento en la consola del navegador,
cada vez que el usuario escriba en la entrada.
Los datos del evento se nos proporcionan como un objeto con muchas propiedades que dependen
del tipo de evento.
Para actualizar el estado con useState, podemos utilizar el segundo elemento que useState nos
devuelve de su matriz.
Este elemento es una función que nos permitirá actualizar el valor de la variable de estado (el
primer elemento). Lo que pasemos a esta función setter cuando la llamemos modificara el estado.
function Saludo() {
function handleInputChange(event) {
setTitle(event.target.value);
return (
<div>
<h1>{titulo}</h1>
<input
placeholder="Actualizar titulo"
onChange={handleInputChange}
/>
</div>
);
Actualizar input
Usando el código anterior, lo que el usuario escriba en el input (el texto viene de
event.target.value) será puesto en estado usando setTitulo y mostrado dentro del elemento h1.
Lo que es especial sobre el estado y por qué debe ser gestionado con un hook dedicado como
useState, es porque una actualización del estado (como cuando llamamos a setTitle) provoca un
re-renderizado.
¿Qué es lo siguiente?
Si quieres una copia de esta hoja de trucos para guardarla con fines de aprendizaje, puedes
descargue una versión completa en PDF de esta hoja de trucos aquí.
Una vez que hayas terminado con esta guía, hay muchas cosas que puedes aprender para avanzar
en tus habilidades al siguiente nivel, incluyendo: