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

381
Vistas
Vue slot no funciona en casos raros e impredecibles (¿posible error de vue?)

Tengo este extraño error con una ranura que no es confiable en ciertos casos desconocidos.

Componentes

Hay 3 componentes jerárquicos.

  • El nieto (headlessTable), que ofrece un espacio denominado arrayValue .
  • El hijo (collapsableCard), que pasa la ranura entre el nieto y el padre.
  • El padre (orderDataCard), que decide generar un enlace para esa ranura.

Problema: en lugar de representar el enlace del padre, el html de ranura predeterminado del hijo se representa cuando se cargan nuevos datos .

Estructura de datos (orderDetails)

  • proceso (obj)
    • marca (cadena)
    • común (objetivo)
      • argumentos adicionales (matriz)
        • categoría (cadena)
        • tipo (cadena)
        • nombre (cadena)
        • valor (cadena)
    • organización de ventas (obj)
    • facturas (matriz)
      • ID de acuerdo de factura (cadena)
      • tipo de pago (cadena)

Reproducción

Stackblitz o Codesandbox

Mire el campo argumentos additionalArguments , contiene un enlace. Presione ALT+M para simular la obtención de nuevos datos. Ahora, en lugar de representar un enlace, se representa el html de ranura predeterminado para esa ranura con nombre. Puede presionar ALT+J para cargar los datos originales, pero esta vez no hay enlace.

Datos iniciales (ALT+J) Datos cargados (ALT+M) Escribe Valor igual
marca calle falso
común común objeto cierto
Organización de ventas Organización de ventas objeto cierto
facturas (vacias) facturas Arr falso

Cómo 2 resolver

  • si quita el comentario de la línea 68 en app.js (o la línea 73 en App.vue si está en codesandbox), que es el campo llamado mark
  • si las invoices no están inicialmente vacías en app.js
  • si la mark se elimina de html en orderDataCard
  • si salesOrganisation se elimina de html en orderDataCard
  • si el html en la sección de plantilla v-for para artículos de invoiceItems está vacío en orderDataCard

Obviamente, estas no son soluciones.

notas

En cualquier caso, no hay dependencia ni nada entre ninguno de los campos, por lo que es difícil para mí entender por qué sucede esto y sospecho que se trata de un error con vue. Ya he creado un problema para esto. Sin embargo, los desarrolladores no verán la reproducción, porque piensan que no es mínima como #líneas > 100. Tan pronto como elimino líneas más significativas, el error se resuelve y el código eliminado no es defectuoso, por lo que es muy frustrante trabajar en esto. Todavía podría eliminar líneas que no son significativas, pero eso dificultaría que todos los involucrados entiendan qué datos se están procesando.

¿Alguien puede reconocer el hecho de que este es un problema con vue y que el código no es reducible O (preferiría esto) alguien puede solucionarlo?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede que esta no sea la solución, pero podría ayudar a encontrarla:

Objetos

Noté que estás trabajando con objetos y convirtiéndolos en matrices. Las propiedades de los objetos pueden ser problemáticas para trabajar porque, a diferencia de las matrices, las propiedades actualizadas no se propagan. Este es un problema con JavaScript, no con Vue. Vue solo fue posible debido a la introducción de observadores, pero los objetos aún no son parte de eso.

Puede tener problemas cuando un objeto se actualiza parcialmente.

Sugeriría mirar Vue.set .
El viejo código mío lo invoca explícitamente por window.Vue.set() para cambios en las propiedades del objeto para que Vue pueda propagarlos correctamente.

Eso es una especie de error en Vue, pero nuevamente proviene del propio JavaScript.

Matrices calculadas

No estoy del todo seguro, pero las matrices calculadas no salvan el problema anterior al trabajar con objetos.
Iría por la ruta segura y usaría Vue.set() al actualizar objetos y propiedades de objetos. Todavía puede usar las matrices calculadas entonces.

De lo contrario, lo obvio: haga matrices reales a partir de los objetos en lugar de trabajar con objetos la mitad del tiempo.

este proceso

¿Hay alguna buena razón por la que esté usando this.process explícitamente en lugar de los accesorios del componente? ¿O es un componente de una biblioteca?

Tragamonedas

¿Has probado exactamente el mismo código pero sin usar la collapsable-card ? ¿Solo genera el enlace en sí? Podría indicar problemas de ranura en el componente collapsable-card . Tal vez también en parte debido a los objetos de arriba.

over 4 years ago · Santiago Trujillo Denunciar

0

El problema está relacionado con el manejo de Vue de múltiples instancias del mismo componente. En OrderDataCard.vue tiene dos instancias de Collapsable-Card sin claves únicas. En este caso:

Vue usa un algoritmo que minimiza el movimiento de elementos e intenta parchear/reutilizar elementos del mismo tipo en el lugar tanto como sea posible.

No sé muy bien cómo funcionan estos algoritmos y por qué, aparentemente, reutilizó la segunda instancia (sin un contenido de ranura definido), pero establecer una clave única para estos componentes resolvió el problema.

Consulte el entorno limitado del código de trabajo: https://codesandbox.io/s/admiring-hamilton-5ytpp?file=/src/components/OrderDataCard.vue:133-149 .

Nota: no pude activar eventos de teclado en mi navegador, así que los activé al hacer clic en el botón.

over 4 years ago · Santiago Trujillo 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