Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

320
Vistas
Estado de React.js actualizándose correctamente solo una vez, luego fallando

Tengo un padre y un hijo componente. Hay 3 accesorios que proporciona el padre, de los cuales 1 no se actualiza correctamente.

A continuación se muestra el componente principal. El accesorio en cuestión es selectedFilters (que es un objeto donde las claves se asignan a conjuntos ) y la función de actualización relevante es filterChanged (esto se pasa al niño)

 import filters from "../../data/filters"; //JSON data const Block = (props) => { const [selectedFilters, setSelectedFilters] = useState({versions: new Set(), languages: new Set()}); console.log(selectedFilters); const filterChanged = useCallback((filter_key, filter_id) => { setSelectedFilters((sf) => { const newSFSet = sf[filter_key]; //new Set(sf[filter_key]); if (newSFSet.has(filter_id)) { newSFSet.delete(filter_id); } else { newSFSet.add(filter_id); } const newSF = { ...sf, [filter_key]: new Set(newSFSet) }; return newSF; }); }, []); return ( <FilterGroup filters={filters} selectedFilters={selectedFilters} onFilterClick={filterChanged} ></FilterGroup> ); }; export default Block;

El siguiente es el componente secundario: (Tenga en cuenta que mientras el componente Filter ejecuta la función filterChanged, creo que es irrelevante para el error)

 import Filter from "./Filter/Filter"; const FilterGroup = (props) => { const { filters, selectedFilters, onFilterClick } = props; console.log(selectedFilters); const filter_view = ( <Container className={styles.container}> {Object.keys(filters).map((filter_key) => { const filter_obj = filters[filter_key]; return ( <Filter key={filter_obj.id} filter_key={filter_key} filter_obj={filter_obj} selectedFilterSet={selectedFilters[filter_key]} onFilterClick={onFilterClick} /> ); })} </Container> ); return filter_view; }; export default FilterGroup;

Al ejecutar la aplicación, encuentro que los filtros seleccionados se actualizan correctamente solo una vez. Después de eso, solo cambia temporalmente en el Block.tsx principal, pero finalmente vuelve al primer valor actualizado. Además, FilterGroup.tsx solo recibe la primera actualización. Después de eso, nunca recibe más valores actualizados.

Aquí están los registros: ingrese la descripción de la imagen aquí

Después de experimentar un poco, está claro que el problema se origina en la función filterChanged . Pero parece que no puedo entender por qué la segunda actualización es temporal Y no se transmite al niño.

¿Algunas ideas? Gracias por adelantado. (Si se requiere alguna otra información, por favor menciónela)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No creo que realmente desee que su función filterChanged se envuelva con useCallback , especialmente con una matriz de deps vacía. con la matriz de deps vacía, creo que useCallback se activará una vez en el renderizado inicial y memorizará el resultado. Es posible que pueda agregar filter_key y filter_id a la matriz de dependencias, pero useCallback tiende a ralentizar las funciones simples, en lugar de agregar un beneficio de rendimiento real, por lo que es posible que desee deshacerse de useCallback completo y cambiar filterChanged a regular función de flecha

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda