Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

229
Visualizações
Reaccionar: cómo evitar que se vuelva a renderizar para el componente secundario

Cuando paso el cursor por encima del número, el elemento selectedItem de estado cambiará al número sobre el que se pasa el cursor.

Sin embargo, por lo que veo en Console, cada vez que paso el cursor sobre un número, los 7 elementos se vuelven a representar, que es la situación que quiero evitar.

¿Cómo hacerlo?

Aplicación.js

 import "./styles.css"; import React, { useState } from "react"; export default function App() { const [selectedItem, setSelectedItem] = useState(1); const Item = ({ itemId }) => { const onItemHover = (id) => { setSelectedItem(id); }; console.log("rendering item ", itemId); return ( <div onMouseOver={() => { onItemHover(itemId); }} > {itemId} </div> ); }; return ( <div className="App"> <div>Selected ITEM: {selectedItem}</div> <div className=".container"> <div className="row"> <Item itemId="1" /> <Item itemId="2" /> </div> <div className="row"> <Item itemId="3" /> <Item itemId="4" /> <Item itemId="5" /> </div> <div className="row"> <Item itemId="6" /> <Item itemId="7" /> </div> </div> </div> ); }

Códigosycaja:
https://codesandbox.io/s/jolly-panini-6gl6b?file=/src/App.js:106-118

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Mueva el Item fuera del componente y memo :

 const Item = React.memo({ setSelectedItem, itemId }) => { const onItemHover = (id) => { setSelectedItem(id); }; console.log("rendering item ", itemId); return ( <div onMouseOver={() => { onItemHover(itemId); }} > {itemId} </div> ); });

De forma predeterminada, memo hará una verificación de igualdad superficial y no se volverá a procesar cuando las propiedades no hayan cambiado.

Le pasaría setSelectedItem así como itemId :

 export default function App() { const [selectedItem, setSelectedItem] = useState(1); return ( <div className="App"> <div>Selected ITEM: {selectedItem}</div> <div className=".container"> <div className="row"> <Item setSelectedItem={setSelectedItem} itemId="1" /> <Item setSelectedItem={setSelectedItem} itemId="2" /> </div> <div className="row"> <Item setSelectedItem={setSelectedItem} itemId="3" /> <Item setSelectedItem={setSelectedItem} itemId="4" /> <Item setSelectedItem={setSelectedItem} itemId="5" /> </div> <div className="row"> <Item setSelectedItem={setSelectedItem} itemId="6" /> <Item setSelectedItem={setSelectedItem} itemId="7" /> </div> </div> </div> ); }

Los establecedores de estado useState son estables, por lo que no provocarán que se vuelvan a representar al cambiar. Por lo tanto, el Item solo se volverá a procesar si cambia itemId del elemento.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda