Cuando se utiliza:
<React.Fragment></React.Fragment>
Es necesario importar, para que funcione:
import React from 'react';
¿Cómo utilizar las props para comunicar componentes en React?
En el desarrollo de aplicaciones, es común que los componentes necesiten comunicarse y compartir información. React nos ofrece una solución simple y efectiva para lograrlo, denominada "props". Este recurso permite que los componentes presenten datos dinámicos, en lugar de contenido estático o "hardcoded". Pero, ¿cómo funcionan exactamente y cómo las implementamos?
¿Qué son las props y cómo se implementan?
Las props (propiedades) son similares a los parámetros en funciones, pero aplicadas a componentes. Se envían como atributos en el JSX:
<TodoCounter completed={16} total={25} />
Aquí, TodoCounter recibe dos props: completed y total. Estas se accesan en el componente mediante la destructuración:
const TodoCounter = ({ completed, total }) => ( <h1>Has completado {completed} de {total} todos</h1> );
¿Cómo se utilizan las props para incrementar la reutilización?
Un componente que acepta props se vuelve más reutilizable, ya que se adapta a distintos datos sin modificar su estructura base:
<TodoCounter completed={8} total={10} /> <TodoCounter completed={3} total={5} />
Con esto, un mismo componente es capaz de mostrar diferentes resultados de acuerdo a las props que recibe.
¿Qué es la prop children y cómo se usa?
La prop children es una propiedad especial que automáticamente encapsula todo lo que está entre las etiquetas de apertura y cierre de un componente:
<TodoList> <TodoItem ... /> <TodoItem ... /> </TodoList>
React convierte automáticamente el contenido en la prop children, que podemos utilizar dentro de nuestro componente:
const TodoList = ({ children }) => ( <ul>{children}</ul> );
React Fragments: ¿Cómo evitar elementos innecesarios?
React Fragments (<React.Fragment>) permiten retornar múltiples elementos sin producir nodos extra en el DOM. Es útil para no llenar nuestro HTML de div innecesarios y puede verse así:
return ( <React.Fragment> <Header /> <MainContent /> <Footer /> </React.Fragment> );
De este modo, se mantiene una estructura limpia y clara en el DOM.
Renderización de arrays y property key
Cuando trabajamos con listas, es esencial proporcionar una prop key única para cada elemento. Esto facilita la eficiencia y orden del sistema de renderizado de React:
const todos = defaultTodos.map((todo, index) => ( <TodoItem key={index} text={todo.text} completed={todo.completed} /> ));
Aquí, nos aseguramos de que cada TodoItem tenga una key única, usando un índice o algún identificador único relevante.
¿Por qué es necesaria la key?
La key ayuda a React a identificar qué elementos han cambiado, añadido o eliminado. Esto optimiza la actualización de listas y es una práctica recomendada para evitar advertencias en la consola y mejorar el rendimiento de la aplicación.
Convertir información estática en dinámica con props
Las props transforman componentes con datos estáticos en entidades dinámicas y personalizables. Este uso, combinado con herramientas como React Fragments y la renderización mediante arrays, proporciona un marco flexible y poderoso para el desarrollo de aplicaciones React. Con práctica, podrás crear interfaces de usuarios dinámicas y eficientes.
¿Qué sigue después de manejar las props?
Una vez dominadas las props, el siguiente paso es personalizar el aspecto de tu aplicación con CSS. Aprende a combinar React y estilos CSS para llevar tus interfaces cerca del diseño original. ¡Continúa explorando y prueba nuevas técnicas para enriquecer tus habilidades en React!
En el desarrollo de aplicaciones, es común que los componentes necesiten comunicarse y compartir información. React nos ofrece una solución simple y efectiva para lograrlo, denominada "props". Este recurso permite que los componentes presenten datos dinámicos, en lugar de contenido estático o "hardcoded". Pero, ¿cómo funcionan exactamente y cómo las implementamos?
Las props (propiedades) son similares a los parámetros en funciones, pero aplicadas a componentes. Se envían como atributos en el JSX:
<TodoCounter completed={16} total={25} />
Aquí, TodoCounter recibe dos props: completed y total. Estas se accesan en el componente mediante la destructuración:
const TodoCounter = ({ completed, total }) => (
<h1>Has completado {completed} de {total} todos</h1>
);
Un componente que acepta props se vuelve más reutilizable, ya que se adapta a distintos datos sin modificar su estructura base:
<TodoCounter completed={8} total={10} />
<TodoCounter completed={3} total={5} />
Con esto, un mismo componente es capaz de mostrar diferentes resultados de acuerdo a las props que recibe.
La prop children es una propiedad especial que automáticamente encapsula todo lo que está entre las etiquetas de apertura y cierre de un componente:
<TodoList>
<TodoItem ... />
<TodoItem ... />
</TodoList>
React convierte automáticamente el contenido en la prop children, que podemos utilizar dentro de nuestro componente:
const TodoList = ({ children }) => (
<ul>{children}</ul>
);
React Fragments (<React.Fragment>) permiten retornar múltiples elementos sin producir nodos extra en el DOM. Es útil para no llenar nuestro HTML de div innecesarios y puede verse así:
return (
<React.Fragment>
<Header />
<MainContent />
<Footer />
</React.Fragment>
);
De este modo, se mantiene una estructura limpia y clara en el DOM.
Cuando trabajamos con listas, es esencial proporcionar una prop key única para cada elemento. Esto facilita la eficiencia y orden del sistema de renderizado de React:
const todos = defaultTodos.map((todo, index) => (
<TodoItem key={index} text={todo.text} completed={todo.completed} />
));
Aquí, nos aseguramos de que cada TodoItem tenga una key única, usando un índice o algún identificador único relevante.
La key ayuda a React a identificar qué elementos han cambiado, añadido o eliminado. Esto optimiza la actualización de listas y es una práctica recomendada para evitar advertencias en la consola y mejorar el rendimiento de la aplicación.
Las props transforman componentes con datos estáticos en entidades dinámicas y personalizables. Este uso, combinado con herramientas como React Fragments y la renderización mediante arrays, proporciona un marco flexible y poderoso para el desarrollo de aplicaciones React. Con práctica, podrás crear interfaces de usuarios dinámicas y eficientes.
Una vez dominadas las props, el siguiente paso es personalizar el aspecto de tu aplicación con CSS. Aprende a combinar React y estilos CSS para llevar tus interfaces cerca del diseño original. ¡Continúa explorando y prueba nuevas técnicas para enriquecer tus habilidades en React!
Cuando se utiliza:
<React.Fragment></React.Fragment>
Es necesario importar, para que funcione:
import React from 'react';
Componentes => Reciben Propiedades. Elementos => Reciben Atributos. ... Hay que tener en cuenta que en JSX, la sintaxis entre atributos y propiedades es muy parecida, ya que escribimos el valor de las props en los componentes como si fueran atributos, pero estos no lo son.. ... Las props son variables que declaramos en nuestro componente como si fueran parámetros de una función, podemos declarar una unica (Prop) o declarar varias Props utilizando la {Desestructuración}. Para luego posteriormente darles un valor como si fueran argumentos, pero utilizando otro tipo de sintaxis, que es muy parecida a la de los atributos de los elementos HTML, con la diferencia que el otorgamos el valor entre {llaves}. ... En cuanto a la propiedad "props.children" esta hace referencia a que React transforma automáticamente a todo lo que se encuentre dentro del componente padre en un elemento "children" , es decir todo lo que se encuentre dentro de una etiqueta de apertura <Component> y una etiqueta de cierre </Component> para React será "Children". .. Por otro lado existe <React.Fragment> o su sintaxis más corta " <> </> " que es un contenedor invisible que tiene como objetivo envolver todos los componentes JSX dentro de un contenedor padre, esto es debido a que React necesita envolver esos componentes para renderizarlos, y asi no crear nodos innecesarios en el DOM. .. Por ultimo, debemos tener en cuenta que podemos renderizar elementos a través de un Array, utilizando en este caso el metodo .map(), y devolviendo el componente "TodoItem" por cada uno de los objetos del array.. Es necesario que le pasemos las props "key={todo.text} text={todo.text}" al componente para que nos muestre un contenido distinto por cada objeto de este array. .. La prop funciona como un Identificador para objeto del array y es necesaria cuando utilizamos el metodo .map()
Juan normalmente me gustan tus clases con tus ocurrencias mantienes el interés en los alumnos pero esta vez déjame quitarme el sombrero no se si todo en si fue obra tuya pero quisiera aprovechar de agradecer a todo el equipo de Platzi por este curso es espectacular ojala sigan actualizando los curso y le den este mismo formato.
Algo que personalmente me ha gustado es destructurar las props y a que evitan el estar repitiendo el props.text y hacen que el código sea más legible.
function TodoItem({text, completed}) {
return (
<li className="TodoItem">
<span>✔</span>
<p>{text}</p>
<span>⚔</span>
</li>
);
}
Nuestro componente TodoCounter recibira 2 propiedades destructuras total, completed, modificamos el componente de manera de el texto hardcodeado quede asi {completed} y {total} para hacer dinamico nuestro componente.
Ahora dentro del componente App.js donde invocamos al componente TodoCounter lo definimos: <TodoCounter completed={16} total={25}/>.
Estos cambios podemos verlos con las devtools del navegador ya que las props no se muestran como atributos en el HTML.
React automaticamente define como elementos hijo a los componentes y/o elementos que estan dentro de dos etiquedas jsx.
Por defecto todo componente require ser exportado a un solo objeto, por esto es que los componentes deben estar encapsulados en una etiqueta:
<React.Fragment>
...
...
...
</React.Fragment>
Para poder enviar array definimos:
const defaultTodos = [
{ text: 'Diseño de proyecto', completed: false},
{ text: 'Diseño de Base de datos', completed: false},
{ text: 'Recopilación de requerimientos', completed: false},
{ text: 'Desarrollo', completed: false},
{ text: 'Implementación', completed: false},
]
Y luego dentro de nuestro componente App vamos definiendo las props que necesitaremos ver con TodoItem:
<TodoList>
{defaultTodos.map(todo => (
<TodoItem
key={todo.text}
text={todo.text}
completed={todo.completed}
/>
))}
</TodoList>
Ahora en TodoItem iremos definiendo las props que necesitaremos (en mi caso tuve que destructurarlas por unos errores que me mostraban las devtools):
function TodoItem({text, completed}) {
return (
<li>
<span>V {completed}</span>
<p>{text}</p>
<span>X</span>
</li>
);
}
De los mejores profes de platzi!
Aquí mi componente de las tareas , lo hice un poco diferente al profesor utilizando solo un span y condicionando si la tarea esta completada o no.
import React from 'react'
export const ListItem = ({task,checked}) => {
return (
<>
<span>{checked? '✔': 'X'}</span>
<p>{task}</p>
</>
)
}
Hostia Juan, me encanta tu forma de explicar descomponiendo poco a poco cada definición para no saturarnos de info. n.n
realmente felicitaciones por la nueva forma de mostrar los cursos
Una forma de utilizar React.Fragment sin tener que importarlo. Es utilizando su shorcut de un tag vacío: <> ... </>.
Sino las formas de utilizar Fragment serian:
Import React from 'react';
...
<React.Fragment>
</React.Fragment>
...
import { Fragment } from 'react';
...
<Fragment>
</Fragment>
...