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

197
Vistas
Cómo guardar el estado abierto/cerrado de un objeto

Creé un componente que visualiza un objeto donde los objetos anidados y de matriz son contraíbles.

Funciona recorriendo todas las claves/índices y utilizando la función de representación adecuada. En este momento, las acciones de colapso y extensión están basadas puramente en la clase CSS.

El problema que tengo ahora es que necesito hacerlo para que el estado colapsado/extendido persista. Entonces, básicamente, necesito una forma de almacenar la información del estado colapsado. y leerlo más adelante. No estoy muy seguro de cómo empezar.

El estado debe persistir incluso cuando se modifica el objeto. Entonces, cuando se empuja un nuevo elemento en el medio de la matriz, aún debería abrir lo mismo. ¿Qué estructura de datos debo usar para esto y cómo lo leería?

La razón por la que no estoy publicando ningún código es que no creo que sea necesario, estoy puramente interesado en cómo se deben estructurar los datos para el estado colapsado/extendido de una matriz/objeto para que persista cuando se realizan actualizaciones en el objeto/matriz.

Intenté hacer algún tipo de "migas de pan" que sigan la estructura del objeto, pero luego me di cuenta de que no persistirá cuando se realicen cambios.

¿Algunas ideas? ¿Es esto posible sin algunas identificaciones únicas codificadas?

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

0

Edición 1: el punto 4 no es óptimo y se puede hacer mejor: después de terminar de representar el objeto principal en el DOM, recorra el objeto de estado y para cada ruta, busque el nodo DOM y expándalo.

Edición 2: en lugar de 'index1.nestedIndex2[1].nestedIndex3', puede hacer 'index1.nestedIndex2.1.nestedIndex3', hace que su código sea más simple

Edición 3: no es necesario usar lodash (punto editado 1)

Espero haber entendido bien tu escenario.

Para conservar el estado expandido (o colapsado), debe:

  1. cree un objeto que almacene las rutas a los índices que desea expandir, como este {'index1.nestedIndex2[1].nestedIndex3': true} . Puede hacer esto al hacer clic para expandir. Por supuesto, esto significa que debe conocer el índice actual y sus padres cuando hace clic; una forma de hacerlo es tener un atributo DOM que contenga el índice, en cada elemento. Entonces, cuando hace clic en un nodo para subir recursivamente hasta llegar al elemento superior y construir esa ruta de cadena
  2. Convierta el objeto de estado en una cadena usando JSON.stringify y guárdelo en localStorage ( https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage ). localStorage.set('expandedState', JSON.stringify(stateObject)) . Si necesita almacenar el estado de varios objetos de datos, debe usar alguna clave específica en lugar de 'estado expandido'
  3. En el código, antes de representar el objeto principal, convierta el estado de la cadena de localStorage nuevamente en un objeto usando JSON.parse
  4. Mientras representa su objeto principal, debe crear la ruta para el nodo actualmente representado y verificar si se puede encontrar en el objeto de estado. En caso afirmativo, amplíelo agregando su clase css. Para volver a construir la ruta, es más óptimo construirla a medida que procesa cada nodo en lugar de usar el mismo método que se usó en el punto 1, pero eso también funcionaría (pero más lento, por lo que para objetos realmente grandes será un problema, creo)
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