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

476
Vistas
¿Por qué vue v-model no funciona para un accesorio de matriz?

Tengo un componente personalizado que toma la propiedad modelValue y emite el evento update:modelValue . En el componente principal, paso una matriz:

TestComponent.vue

 <template> <div> <button @click="updateIt">Test</button> </div> </template> <script> export default { props: { modelValue: Array }, emits: ["update:modelValue"], setup(props, {emit}){ return { updateIt(){ emit("update:modelValue", [4,5,6]) } } } } </script>

aplicación.vue

 <template> <div> <test-component v-model="myArr"/> <ul> <li v-for="i in myArr" v-text="i"></li> </ul> </div> </template> <script> import TestComponent from "./TestComponent.vue"; export default { components: { TestComponent }, setup(props, {emit}){ const myArr = reactive([1,2,3]); return { myArr } } } </script>

La lista no se actualiza cuando presiono el botón, ¿por qué?

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

0

Internamente, la directiva v-model se cambia a una función de controlador para el evento update:modelValue que se parece a esto:

$event => ((exp => $event) donde exp es la expresión en la directiva

lo que básicamente significa que, cuando se emite el evento update:modelValue , el valor que emite se asigna directamente a la variable myArr , reemplazando efectivamente toda la variable reactive sin desencadenar la cadena de reactividad, porque no ocurre a través del proxy.

Si myArr fuera una ref([]) vue lo detecta y la función del controlador se parece a esto:

$event => (exp ? (exp).value = $event : null) donde exp es la expresión en la directiva

lo que significa que el valor se asigna a través del proxy ref, lo que desencadena la cadena de reactividad.

Pero no hay una lógica interna que verifique si la expresión pasada es una matriz y, de ser así, hace algo de magia de empalme para mantener la variable original, debe hacerlo usted mismo.

Soluciones posibles:

1) usar una clave de objeto:

 <test-component v-model="myArr.data"/> ... const myArr = reactive({ data: [1,2,3] });

2) usar una referencia:

 <test-component v-model="myArr"/> ... const myArr = ref([1,2,3]);

3) use una función de controlador personalizado:

 <test-component :modelValue="myArr" @update:modelValue="onChange"/> ... const myArr = reactive([1,2,3]); function onChange(newval){ myArr.splice(0, myArr.length, ...newval); }
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