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

124
Vistas
Vue 3 v-si no reacciona a los cambios dentro de una función

Que funciona:

Quiero representar un elemento solo si algún valor booleano es verdadero usando Vue 3. Este es un ejemplo siguiendo la documentación de Vue 3 y funciona bien:

Modelo:

 ... <div id="btnReady" @click="ready = !ready"> <img v-if="!ready" src="ready.svg" alt="" /> <img v-else src="unready.svg" alt="" /> </div> ...

Guion:

 <script setup> import { ref } from "vue"; let ready = ref(false); </script>

Lo que no entiendo:

Eso tiene mucho sentido para mí, excepto que realmente no entiendo la necesidad de ref() . Leí la documentación al respecto y realmente no entendí cómo/por qué vue requiere una inicialización como esta let ready = ref(false) y por qué usar let ready = false no reaccionará a los cambios en la variable ready .

Qué no funciona:

Además de alternar un valor booleano, el controlador onclick también debería realizar otras acciones. Entonces, en lugar de alternar el valor como este onclick="ready = !ready" quiero llamar a una función onclick="toggleReady" . El valor de ready se alternará dentro de la función y se ejecutarán algunas otras acciones. La función se ejecuta al hacer clic correctamente, pero Vue NO reacciona a los cambios de la variable ready y la declaración v-if no "funciona" correctamente -> el elemento aún está visible.

Modelo:

 <div id="btnReady" @click="toggleReady"> <img v-if="!isReady" src="ready.svg" alt="" /> <img v-else src="unready.svg" alt="" /> </div>

Guion:

 <script setup> import { ref } from "vue"; let ready = ref(false); let toggleReady = () => { ready = !ready; // do some more stuff }; </script>

¿Alguien puede explicarme este comportamiento y cómo puedo solucionarlo?

PD: también intenté usar una propiedad computed en la instrucción v-if en lugar de una variable normal. no funciono...

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

0

Como @Bravo mencionó en los comentarios, debe usar en su código js ready.value = !ready.value; en lugar de ready = !ready; ( https://vuejs.org/api/reactividad-core.html#ref )

Si solo desea cambiar la fuente de una imagen, puede usar la representación de atributos condicionales de esta manera:

 ... <div id="btnReady" @click="ready = !ready"> <img :src="!ready ? 'ready.svg' : 'unready.svg'" alt="" /> </div> ...
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