Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¡Construye Tu Primera Aplicación Web Con ReactJS! ? - Parte 5 - by Ernesto Garcia N - Medium
¡Construye Tu Primera Aplicación Web Con ReactJS! ? - Parte 5 - by Ernesto Garcia N - Medium
Got it
Si estás aquí es porque vienes de parte 4 de este tutorial de React, donde vemos cómo
separar nuestra aplicación en componentes, tanto smart components como dumb
components. Sin embargo, en esta parte llevaremos esa idea al siguiente nivel.
Por eso, en este tutorial vamos utilizar el concepto de propiedades de los componentes
para dotarles de funcionalidad, y a su vez, vamos a migrar toda la aplicación a una
arquitectura completamente hecha de componentes.
Y bueno, para eso existen las propiedades de los componentes, que son simplemente
atributos que se le pasan como argumentos a través de su tag, y que son útiles
precisamente para el caso de uso que se nos presenta.
Como puedes observar, las propiedades son como los atributos de html, sólo que pueden
contener cualquier tipo de dato que le pasemos entre corchetes (gracias a JSX), por lo
que, en nuestra aplicación (en el App.js), a cada uno de los <Task /> vamos a enviarle
el valor de dicha tarea, de la siguiente forma:
<Task value={task}/>
Este dato es enviado al componente correspondiente como prop, así que en dicha
función, podemos recibirlos de esa forma, quedando nuestro componente de la siguiente
forma:
function Task(props) {
return (
...
);
Al ser Task un componente, éste puede recibir parámetros, y en este caso el parámetro
recibido es props, que contiene los atributos que le asignamos cuando llamamos el
componente.
Si por alguna razón deseamos inspeccionar props, podremos encontrarnos con esto:
props = {
Ahora, para consumirlo, tan sólo hay que reemplazar {“task”} por {props.value}, tal
como se muestra en el ejemplo a continuación:
Aunque esta arquitectura pueda parecer un poco exagerada dada la sencillez de nuestra
aplicación, este tipo de conceptos se manejan de forma usual en la construcción de
aplicaciones más complejas, por lo que vale la pena hacer un poco de práctica.
2. layout.js: Este componente sólo contendrá los estilos que envuelven al smart
component.
5. task-list.js: Aquí irá la parte de la aplicación que mapea cada una de las tareas que
tenemos.
|--components/
|--title.js
|--task-list.js
|--task.js
|--layout.js
|--input.js
layout.js
Para este componente, vamos a retirar el <div> que envuelve la aplicación, y lo
pasaremos a un componente. No obstante, ¿cómo hacemos para que este
componente contenga todos los datos que están dentro del div? Fácil, con
props.children.
children viene por defecto en las propiedades de cada componente, y hace referencia a
aquello a lo que envuelve dicho componente, por lo que podemos hacer uso de esto así:
function Layout(props){
return(
<div className="container">
{props.children}
</div>
Y después, importándolo en App.js tal como ya sabemos hacer, quedando finalmente así:
task-list.js
En este componente pondremos la parte de la aplicación que mapea los <Task/>, así
que, no sólo nos encargaremos de copiar y pegarlo en un nuevo archivo, si no que
también debemos importar en este el archivo task.js
function TaskList(props){
return(
<Fragment>
<Task
key={id}
value={task}
/>
)}
</Fragment>
En negritas, puse los elementos nuevos que se agregaron, los cuáles describo a
continuación:
2. key={id}: En caso de no incluir esto, React te dará una advertencia indicándote que
cada uno de los elementos mapeados deben tener un key. Este ayuda a React a
ordenar el árbol de componentes del que hablamos en el paso 2, y tiene que ser
único. Para ello utilizamos el segundo parámetro que entrega el .map(), el cuál es el
índice en el arreglo del elemento que se está iterando (1, 2, 3… n).
3. import Task: Corresponde a la importación del componente que usaremos por cada
tarea.
function Input(props) {
return (
<form onSubmit={props.handleSubmit}>
<input
value={props.value}
onChange={props.handleTaskChange}
type="text"
className="new-task"
/>
</form>
);
Para eso, vamos a crear un método en nuestro App.js, que maneje la eliminación de una
tarea, haciendo uso de su posición en el arreglo, por lo que nuestro handler será una
función que reciba la posición de la tarea a eliminar en el arreglo, y con ello, removerla
del mismo.
newTasks.splice(id, 1)
this.setState({
tasks: newTasks,
})
He resaltado el método splice, puesto que es la primera vez que se utiliza. No obstante,
básicamente recibe dos parámetros; la posición del elemento a eliminar, y la cantidad de
elementos por remover.
Le pasamos este método como propiedad a nuestra lista de tareas, y a su vez, este mismo
método hay que pasarlo a cada una de las tareas junto con su id (que utilizaremos para
identificar la tarea a eliminar), tal como se muestra a continuación:
function Task(props) {
return (
<div className="task-container">
<h3 className="task">{props.value}</h3>
<div className="button-container">
<button
className="delete-button"
>
</button>
</div>
</div>
);
El evento onClick (y cualquier otro), recibe una función en javascript, por lo que
podemos invocar a una función que llame a otra función. En este caso, escribimos un
arrow function que llama a la función que recibimos por propiedades, y aquí es donde
podemos añadir el id para que encuentre cuál es la tarea que hay que eliminar.
Para asegurarnos de que los botones se vean correctamente, hay que agregar los
siguientes estilos a nuestro App.css:
.delete-button {
background-color: black;
border-radius: 13px;
height: 23px;
color: white;
border-width: 0px;
font-weight: bolder;
.button-container {
position: relative;
float: right;
Conclusión
Finalmente. Ahora ya tienes todas las herramientas para poder colaborar en proyectos
basados en react, al menos hasta un nivel básico, y además, si seguiste todos los pasos,
deberías de tener un proyecto bien desarrollado en React que puedes mostrar a tus
amigos, profesores y colegas, que además te sirve como portafolio y es una excelente
herramienta de empleabilidad.
En la última parte de esta serie de tutoriales, haremos algunas mejoras extras al diseño
de nuestra aplicación, pero no añadirá nada nuevo en términos de conocimiento, por lo
que es totalmente opcional.
Lo que sigue a partir de aquí es investigar de cómo utilizar librerías de manejo de estado
más robusto como Redux, o Apollo con GraphQL, y por supuesto, aprender de cómo
integrar una arquitectura ahora sí con un backend completo, utilizando ExpressJS y
bases de datos como MongoDB, e incluso, a realizar el setup completo de React sin
utilizar create-react-app, y aprendiendo a configurar Webpack.
Podrás deducir que toda esta serie de tutoriales son sólo la punta del iceberg, pero una
buena herramienta para iniciarte como desarrollador en ReactJS.
Tal como dije al inicio de este grupo de tutoriales; este es el tutorial que hubiera querido
tener al principio como desarrollador con esta tecnología, por lo que, espero que te haya
servido.
Recuerda: Todos los avances de los tutoriales hasta este punto los puedes encontrar en
mi repositorio.
Gracias, y felicidades!
-Ernesto G.