⊗jsrtPmHkAMe 15 of 47 menu

API memo en React

Antes de considerar el siguiente hook, es necesario mencionar también la útil API memo, que nos ayuda a evitar el rerenderizado de un componente, si sus props permanecen sin cambios.

Analicemos esto con un ejemplo. Creemos un componente App, que tendrá dos inputs, en los cuales, supongamos, se ingresan el nombre y el apellido:

return ( <div> <label> nombre: <input value={name} onChange={(e) => setName(e.target.value)} /> </label> <br /> <label> apellido: <input value={surn} onChange={(e) => setSurn(e.target.value)} /> </label> </div> );

Añadamos al inicio del componente los estados para ellos:

const [name, setName] = useState(''); const [surn, setSurn] = useState('');

Hagamos también un componente hijo Child.js, que muestre un saludo, en el cual se mostrará el nombre ingresado. También en la consola se mostrará la cadena 'child render' en cada renderizado de este componente:

function Child({ name }) { console.log('child render'); return <h3>¡Hola {name}!</h3>; }

Añadamos Child en el maquetado del componente principal después del último input y pasémosle como prop el nombre:

<Child name={name} />

Importémoslo en el componente principal:

import Child from './Child';

Y ahora abramos la consola y comencemos a ingresar nombre y apellido en los campos. Aquí veremos que incluso al ingresar caracteres en el campo para el apellido, nuestro componente hijo se redibujará cada vez. No hay problema, ya que nuestro componente es pequeño. Pero imaginen si este componente mostrara una gran cantidad de datos y, además, se redibujara cada vez.

Y ahora envolvamos el componente hijo en memo, y veamos cómo cambia el renderizado. Primero importemos en él memo:

import { memo } from 'react';

Luego creemos una nueva variable y asignémosle nuestro Child, envuelto en memo. Obtendremos la siguiente expresión funcional:

const Child = memo( function Child({ name }) { console.log('child render'); return <h3>¡Hola {name}!</h3>; });

Abramos la consola e ingresemos nuevamente nombre y apellido en los campos. Ahora vemos que al ingresar el apellido, nuestro componente hijo no se redibuja.

Hay que recordar que esto no funcionará si con las props sin cambios se modifican los estados utilizados por el componente o el contexto que utiliza cambios.

Tome el código del componente App, que hicimos en esta lección, deje en él solo el primer input. Cree un componente React Text, que contenga un párrafo con el texto 'long text', y colóquelo en App después del input.

En el componente Text añada la línea console.log('text render');. Asegúrese de que al ingresar caracteres en el input el componente Text se redibuja cada vez.

Y ahora envuelva el componente Text en memo. Asegúrese de que al ingresar caracteres en el input el componente Text no se redibuja repetidamente.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar