⊗jsrtPmHkAMe 15 of 47 menu

API memo no React

Antes de considerarmos o próximo hook, é necessário mencionar a útil API memo, que nos ajuda a evitar a re-renderização de um componente, se suas props permanecerem inalteradas.

Vamos analisar isso com um exemplo. Vamos criar um componente App, que terá dois campos de entrada, nos quais, suponhamos, são inseridos nome e sobrenome:

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

Vamos adicionar no início do componente os estados para eles:

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

Vamos criar também um componente filho Child.js, que exibirá uma saudação, na qual será exibido o nome inserido. Além disso, no console será exibida a string 'child render' a cada renderização deste componente:

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

Vamos adicionar Child no JSX do componente principal após o último campo de entrada e vamos passar para ele como prop o nome:

<Child name={name} />

Vamos importá-lo no componente principal:

import Child from './Child';

E agora vamos abrir o console e inserir nome e sobrenome nos campos de entrada. Aqui veremos que mesmo ao digitar caracteres no campo para o sobrenome, nosso componente filho será renderizado novamente a cada vez. Nenhum problema, pois temos um componente pequeno. Mas imagine se este componente exibisse uma grande quantidade de dados e, ao mesmo tempo, fosse renderizado novamente a cada vez.

E agora vamos envolver o componente filho em memo e observar como a renderização muda. Primeiro, vamos importar memo para ele:

import { memo } from 'react';

Em seguida, vamos criar uma nova variável e atribuir a ela nosso Child, envolvido em memo. Teremos o seguinte expressão funcional:

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

Vamos abrir o console e inserir nome e sobrenome nos campos novamente. Agora vemos que ao digitar o sobrenome, nosso componente filho não é renderizado novamente.

É preciso lembrar que isso não funcionará se, com props inalteradas, mudarem os estados utilizados pelo componente ou o contexto que utiliza mudanças.

Pegue o código do componente App, que fizemos nesta lição, deixe nele apenas o primeiro campo de entrada. Crie um componente React Text, contendo um parágrafo com o texto 'texto longo', e posicione-o em App após o campo de entrada.

No componente Text adicione a linha console.log('text render');. Certifique-se de que ao digitar caracteres no campo de entrada, o componente Text é renderizado novamente a cada vez.

E agora envolva o componente Text em memo. Certifique-se de que ao digitar caracteres no campo de entrada o componente Text não é renderizado novamente.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar