Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!