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

195
Visualizações
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 Respostas
Responde à pergunta

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 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