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

286
Visualizações
Funciones en línea en el mapa

¿Cuál es la forma más eficiente de evitar una función en línea en un bucle?

 const SomeComponent = () => { const handler = (idx) => console.log(idx); return (<> [...Array(100)].map((_, index) => ( <div onClick=(() => handler(index))>Click me {index}</div> </>); }

Supongo que esto es un poco de ingeniería excesiva

 const OtherComp = ({ index, onClick, children }) => { const handle = () => { onClick(index); } return <div onClick={handle}>{children}<div/> } const SomeComponent = () => { const handler = useCallback((idx) => console.log(idx), []); return (<> [...Array(100)].map((_, index) => ( <OtherComp onClick=(handler)>Click me {index}</div> </>); }

Los "problemas" en los que estaba pensando eran/son:

  • recolector de basura (casi no me importa)
  • creación de la función "misma" en un bucle
  • re-renderización de todos los niños cada uno por cada clic a medida que la propiedad de entrada ha cambiado - digamos que el clic está cambiando el div seleccionado
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Creo que está perfectamente bien. Es muy poco probable que tenga ningún impacto en el rendimiento. Pero si es algo que le preocupa, dado que el index está dentro del alcance de la devolución de llamada .map , la única otra opción que se me ocurre es que el controlador examine el DOM que lo rodea para obtener el índice:

 <div onClick={handler}>Click me {index}</div>
 const handler = (e) => { const div = e.currentTarget; const index = [...div.parentElement.children].indexOf(div); console.log(index); };

Pero usar {() => handler(index)} es un estilo mucho más parecido a React, y es mucho más fácil de leer y entender; prefiero usar eso en todos los casos siempre que sea posible.

about 4 years ago · Juan Pablo Isaza Relatório

0

Siempre que el handler no sea demasiado complicado, también puede definirlo dentro del map y luego referirse a él directamente en onClick . Para mí personalmente, eso incluso deja más claro lo que va a pasar, porque no tengo que hacer el salto mental de una función a la siguiente para averiguarlo.

demostración de trabajo:

 const SomeComponent = () => { return ( [...Array(100)].map((_, index) => { const handler = () => console.log(index); return <div onClick={handler}>Click me {index}</div>; }) ); } ReactDOM.render(<SomeComponent />, document.getElementById('react'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> <div id="react"></div>

PD: tuve que hacer algunos pequeños cambios porque su código no era sintácticamente correcto.

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