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

94
Visualizações
Difundir en un `useEffect` provocando una gran cantidad de renderizaciones

Tengo un controlador de clasificación definido así:

 const onSortHandler = useCallback((property: string, direction: string) => { setTodoList([...todoList.sort(/**<sort function snipped>**/)]); }, [todoList]);

Esta función se transmite a un componente secundario donde tengo algo como:

 const [sort, setSort] = useState<{ name: string | undefined, direction: string | undefined }>({ name: 'id', direction: 'asc' }) useEffect(() => { onSortHandler(sort.name, sort.direction); }, [sort, onSortHandler]);

La idea es que cada vez que alguien cambie la propiedad y la dirección de ordenación, activé una nueva ordenación y esparcir el nuevo objeto en setTodoList provoca una nueva representación.

Ahora bien, esto funciona bien, pero eslint me dijo que debería agregar onSortHandler a la matriz de dependencias useEffect , lo cual hice, y causó una gran cantidad de renderizaciones, así que seguí su consejo y agregué useCallback a la mezcla.

Obtengo una gran cantidad de renderizaciones, lo que hace que la funcionalidad de clasificación no funcione. Si onSortHandler de la matriz de dependencias useEffect , funciona bien, pero recibo la advertencia de eslint que me gustaría ordenar.

Sé que es la propagación la que causa el problema, ya que si lo elimino, el problema desaparece (pero luego la lista nunca se vuelve a mostrar en un nuevo tipo, lo cual es otro problema).

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

0

Haga onSortHandler estable (lo que significa que nunca cambia) como:

 const onSortHandler = useCallback((property: string, direction: string) => { // use functional state update: setTodoList(current => current.slice().sort(/**<sort function snipped>**/)); }, []); // < no dependencies

Esto le permite usarlo como una dependencia donde sea necesario sin que realmente active ningún efecto de actualización.

Nota : cambié la extensión a slice (haga una copia primero), porque usar .sort en current (o todoList en su código) sigue siendo una manipulación de estado, ya que sort ordena en su lugar .


Ref: Actualizaciones funcionales

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