
En este artĆculo, veremos cómo funcionan State & Lifecycle en React. Este conocimiento es realmente poderoso, ya que nos ayuda a separar las preocupaciones, agregar dinamismo y construir componentes verdaderamente reutilizables.
Este artĆculo es parte de una serie que estoy escribiendo sobre el aprendizaje de los fundamentos de React. ¡AsegĆŗrese de seguirme si desea realizar un seguimiento!
¿QuĆ© es el estado?
El estado se usa con las clases de componentes React para hacerlas dinĆ”micas. Permite que el componente realice un seguimiento de la información cambiante entre los renders. MĆ”s especĆficamente, el estado de un componente es un objeto que contiene información que puede cambiar durante la vida Ćŗtil del componente.
Estado v Props
¿Se preguntarĆ”n en quĆ© se diferencia esto de los accesorios? Nos fijamos en los apoyos en mi artĆculo anterior: Reaccionar: Componentes y apoyos . Recuerde que los accesorios son un objeto que contiene información para controlar el comportamiento de un componente. Esto suena muy similar al estado, pero veamos cómo difieren:
- Los accesorios son inmutables. Una vez establecidos, no se pueden cambiar
- El estado es observable. Puede contener datos que pueden cambiar con el tiempo.
- Los accesorios se pueden usar en componentes de función o clase
- El estado estĆ” limitado a los componentes de la clase.
- Los accesorios son establecidos por el componente padre
- Los controladores de eventos actualizan el estado
Usando estado
Cuando se usa State, necesitamos que el estado de un componente siempre exista, por lo que debemos establecer un estado inicial. Podemos hacerlo definiendo nuestro estado en el constructor de nuestra clase de componente, asĆ:
clase MyClass extiende React.Component {
constructor (props) {
super (props);
this .state = {atributo: "valor" };
}
}
Nota: Examinaremos este código en detalle mĆ”s adelante en este artĆculo, bajo mĆ©todos de ciclo de vida. ¡Por ahora es bueno saber cómo presentamos el estado!
Estado de actualización
Lo siguiente que debe saber sobre el estado es que nunca debe actualizarse explĆcitamente . React utilizarĆ” un objeto observable para el estado, que permite que el componente se comporte en consecuencia.
Si, por ejemplo, debemos actualizar el estado de los componentes de esta manera:
this.state.attribute = "valor cambiado";
¡TendrĆamos un error de renderizado! Como estado no serĆa capaz de detectar los cambios.
setState ()
Es por eso que utilizamos el mƩtodo incorporado React de
setState()
. Toma un solo parƔmetro y espera que se actualice un objeto que contiene nuestro conjunto de valores.
El mƩtodo actualizarƔ nuestro estado y luego llamarƔ al
render()
mĆ©todo para volver a representar la pĆ”gina. Por lo tanto, la forma correcta de actualizar nuestro estado es asĆ:this.setState ({atributo: "valor-cambiado"});
Recuerde que solo se nos permite definir nuestro estado explĆcitamente en el constructor, cuando proporcionamos el estado inicial.
Establecer mĆŗltiples estados
También podemos aprovechar las habilidades asincrónicas de React configurando múltiples estados, en un solo
setState()
mĆ©todo. Un caso de uso para esto podrĆa ser cuando queremos mantener un recuento (por ejemplo, seguimiento de me gusta de una publicación o foto).
PodrĆamos hacer esto usando una función de flecha ES6, asĆ:
this.setState ((prevState, props) => ({
total: prevState.count + props.diff
}));
AquĆ estamos tomando nuestro estado de componentes y accesorios anteriores, como parĆ”metro, y luego estamos actualizando el total. Lo mismo tambiĆ©n podrĆa escribirse como una función regular asĆ:
this.setState (function (prevState, props) {
return {total: prevState.count + props.diff};
});
Ciclo vital
En la siguiente sección, veremos el ciclo de vida de React. Comencemos con una definición.
¿QuĆ© es el ciclo de vida?
En general, podrĆamos definir un ciclo de vida como nacimiento, crecimiento y muerte. Y nuestros componentes React tambiĆ©n siguen este ciclo: se crean (montados en el DOM), experimentan crecimiento (mediante la actualización) y mueren (desmontados del DOM). ¡Este es el ciclo de vida del componente!
Dentro del ciclo de vida de un componente, hay diferentes fases. Estas fases tienen sus propios mƩtodos de ciclo de vida. Veamos ahora estos mƩtodos.
Los mƩtodos del ciclo de vida
El ciclo de vida de un componente se puede dividir en cuatro partes:
- Inicialización
- Montaje
- Actualización
- Desmontaje
Veamos cada uno en detalle.
Inicialización
En esta fase, nuestro componente establecerĆ” su estado y accesorios. Esto generalmente se hace dentro de un mĆ©todo de constructor, asĆ:
clase Initialize extiende React.Component { constructor (props) { // llamando al constructor de su super padre (props); // proceso de inicialización this.state = { time: new Date (), selectedStatus: false }; } }
Montaje
Una vez que se completa la fase de inicialización, entramos en la fase de montaje. Esto es cuando nuestro componente React "se monta" en el DOM (se crea e inserta en el DOM). Esto es cuando nuestro componente se procesa por primera vez. Los métodos disponibles en esta fase son
componentWillMount()
y componentDidMount()
.
componentWillMount ()
Este mƩtodo se llama justo antes del montaje de componentes en el DOM (o cuando se llama al mƩtodo de renderizado). Entonces nuestro componente se monta.
componentDidMount ()
Este mƩtodo se llama despuƩs de que el componente se monte en el DOM. Al igual
componentWillMount()
, se llama solo una vez en un ciclo de vida. Antes de su ejecución, se llama al método de representación. Podemos hacer llamadas a la API y actualizar el estado con la respuesta de la API.
Veamos estos métodos en acción con un ejemplo:
class LifeCycle extiende React.Component { componentWillMount () { console.log ('Component will mount!') } componentDidMount () { console.log ('Component did mount!') this.getData (); } getData = () => { / * mĆ©todo para hacer una llamada API para datos * / } render () { return ( <div> <h1> ¡MĆ©todos de montaje en acción! </h1> </div> ); } }
Actualización
Después de la fase de montaje donde se crea nuestro componente, entramos en la fase de actualización. Aquà es donde cambia el estado del componente y, por lo tanto, se realiza la representación.
Los datos del componente (su estado y accesorios) se actualizarÔn en respuesta a eventos del usuario, como hacer clic, escribir, etc. Esto da como resultado la representación del componente. Los métodos que utilizamos aquà son:
shouldComponentUpdate ()
Este método determina si el componente debe actualizarse o no. Por defecto, devolverÔ verdadero. Si en algún momento, si desea volver a representar el componente en una condición, el
shouldComponentUpdate()
mĆ©todo serĆa la opción correcta.
Si, por ejemplo, solo desea volver a renderizar su componente cuando hay un cambio en la utilerĆa, esto serĆa cuando usa este mĆ©todo. Recibe argumentos como nextProps y nextState que nos ayudan a decidir si volver a renderizar haciendo una comparación con el valor actual de prop.
componentWillUpdate ()
Llamamos a este mƩtodo antes de volver a representar nuestro componente. Se llama una vez despuƩs.
shouldComponentUpdate().
Si desea realizar un cĆ”lculo antes de volver a representar el componente y despuĆ©s de actualizar el estado y la utilerĆa, entonces usarĆa este mĆ©todo. Al igual que shouldComponentUpdate()
, tambiƩn recibe argumentos como nextProps y nextState .
componentDidUpdate ()
Llamamos a este mƩtodo despuƩs de volver a representar nuestro componente. DespuƩs de que el componente actualizado se actualiza en el DOM, el
componentDidUpdate()
mƩtodo se ejecuta. Este mƩtodo recibirƔ argumentos como prevProps y prevState .
Vamos a ampliar nuestro ejemplo anterior:
clase LifeCycle extiende React.Component { constructor (props) { super (props); this.state = { time: new Date (), selectedStatus: false, list: [] }; } componentWillMount () { console.log ('Component will mount!') } componentDidMount () { console.log ('Component did mount!') this.getList (); } getList = () => { / * mĆ©todo para hacer una llamada API para datos * / fetch (' https://api.mydomain.com ') .then (response => response.json ()) .then (data => this.setState ({list: data})); } shouldComponentUpdate (nextProps, nextState) { return this.state.list! == nextState.list } componentWillUpdate (nextProps, nextState) { console.log ('¡El componente se actualizarĆ”!'); } componentDidUpdate (prevProps, prevState) { console.log ('¡El componente se actualizó!') } render () { return ( <div> <h1> ¡MĆ©todos de montaje en acción! </h1> </div> ); } }
Desmontaje
La última fase es desmontable. Donde nuestro componente se desmonta del DOM. El método que podemos usar aquà es:
componentWillUnmount ()
Llamamos a este método antes de que tenga lugar el desmontaje. Antes de la eliminación del componente del DOM,
componentWillUnMount()
se ejecutarĆ”. ¡Este mĆ©todo es el final del ciclo de vida del componente!
A continuación se muestra un diagrama de flujo que muestra todos los métodos del ciclo de vida:

Conclusión
¡Y eso es! Hemos cubierto algunos conceptos importantes que son fundamentales para React. Primero observamos el estado, comparamos el estado con los accesorios y observamos cómo actualizar y establecer mĆŗltiples estados. Luego pasamos al ciclo de vida del componente React, que abarca las fases (inicialización, montaje, actualización y desmontaje) y los mĆ©todos disponibles para cada uno.
No hay comentarios.:
Publicar un comentario