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

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

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