React (Componentes)
Tags: react, beginners, webdev, spanish
Published: 2021-05-10 19:17:20

# ¿Qué es un Componente en React?


*Pequeña pieza de código encapsulada reutilizable que realiza un trabajo en específico y puede tener estado o no. Aceptan entradas arbitrarias (llamadas “props”) y devuelven a React elementos que describen lo que debe aparecer en la pantalla.*



Todo lo que contiene una aplicación web puede ser un componente, la aplicación web en si misma puede verse como un componente que contiene otros componentes hijos, como lo son la barra de navegación, los menús, botones, etc.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ielvb2cotk3c1fnsdm6t.png)

# Estado
*Es como se encuentra la información del componente en un punto determinado del tiempo*.

Todo componente tiene un estado inicial. El estado inicial es la información inicial del componente, antes de ser modificada por alguna interacción del usuario.

Por ejemplo. En el estado inicial de este componente los inputs del formulario no tienen valor alguno.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d1fg9of7mha3fe0x9pu2.png)

El estado se actualiza cuando el usuario interactúa con la interfaz.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ni0yt9mz1n8udjn3yew.png)

# ¿Cómo crear componentes en React?

Existen dos maneras de crear un componente 

1. Basada en Funciones. (**Function Components**)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hibtk40412d0ipxb5ri1.png)

2. Basada en Clases. (**Class Components**)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/igtx0avxany7qm4dc9yb.png)

### **¿Por qué usar Componentes funcionales?**

A partir de la versión 16.8 en React se adicionaron los hooks, que le proporcionaron características a los componentes basados en  funciones que antes eran únicas de los componenetes de clase, como lo son el estado y métodos de ciclo de vida. Esto aunado a la facilidad de su uso, perfilan a los componentes funcionales, como el futuro en cuanto a implementeción de componentes en React.

# Renderizando un Componenete

Para poder ver el resultado del código de nuestro componente en pantalla debemos renderizarlo. Renderizar es el proceso en el cual React va a mostrar o anclar,  los componenetes que escribimos con Reactjs, en una aplicación en la que el usuario pueda verlos o el navegador pueda entenderlos.

Tenemos que crear un elemento en nuestro HTML; es aquí en donde se renderiza todo el código que hagamos ,por lo general es un div, que generalmente al configurar un proyecto viene  por defecto configurado.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xpaerxas4rv3xo7i8a5h.png)

Es por esto que todas las aplicaciones hechas con React solo contienen un archivo HTML.

En **el index.js** escribimos:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emlt65bbegaqfqhy3aok.png)

`RectDOM` es una paquete o libreria de Reactjs que nos ayuda a renderizar nuestros elementos dentro de nuestro archivo HTML.

Ejemplo:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oechaiqva2zjcx1ntf55.png)

# Props

**Definicion:** Son valores únicos u objetos, contienen un conjunto de datos que se pasan a los componentes mediante los elementos, utilizando una convención de nomenclatura similar a los atributos de etiquetas HTML.

###¿Para qué sirven?
El propósito principal de los ***Props*** en React es proporcionar las siguientes funcionalidades a un component.

1. Pasar datos personalizados a un componente.

2. Desencadenar cambios de estado.


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e6ptud53sa2igg6ypvcs.png)
Por ejemplo. Cuando creamos un elemento; dentro de la etiqueta, del lado izquierdo, primero pondremos el nombre del componente. En el caso de la imagen que pusimos como ejemplo es _"Element"_, del lado derecho pondremos el nombre de nuesta propiedad _"reacProp"_, esta a su vez está pasando un tipo de dato string a nuestro elemento _"Element"_:

Cuando creas una propiedad, como la propiedad reactProp, esta se agrega al objeto de accesorios nativos de React y podra ser invocada al igual que un objeto en JS con la nomeclatura `props.reactProp`.

###Desestructuración de Props
También podemos desestructura las props entre llaves. Por ejemplo:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtbn9v8eqzomws0hd1em.png)

### Proptypes.
Sirven para definir un valor por defecto a las propiedades y verificar que ese valor sea correcto, en caso que el valor de alguna propiedad no sea enviado por el componente padre.
Para importarlo debemos escribir la nomenclatura `import ProTypes from 'prop-Types'` e invocarla con `ComponenteNombre.propType` como se muestra en el siguiente ejemplo:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9lf9yyaltcgk5639kmr0.png)

Para exportar nuestro componente a otros archivos de nuestra aplicación con los valores de definidos en las propTypes usamos la sintaxis `export default ComponenteNombre ` .


### DefaultProps

Agrega un valor por defecto a alguna propiedad en caso de que no lo tenga.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/98x8q8q5cm6sudevmc8d.png)