.value ve skriptu
Ref je jako krabička, ve které je hodnota. Ve skriptu krabičku otevřete pomocí .value, když hodnotu čtete, i když ji měníte:
<script setup>
import { ref } from "vue";
const salky = ref(0);
function pridejSalek() {
salky.value++;
}
</script>
<template>
<p>Šálků kávy dnes: {{ salky }}</p>
<p>{{ salky > 2 ? "Nedáte si příště čaj?" : "Dobrou chuť!" }}</p>
<button @click="pridejSalek">Ještě jednu kávu</button>
</template>V šabloně je to jen salky, bez .value, ve {{ }} stejně jako v podmínce. Vue v šabloně refy rozbalí: přečte jejich .value za vás. Refy se nejvíc používají právě v šabloně, takže nemusíte pořád dokola psát .value. Skript je ale obyčejný JavaScript a v něm je salky krabička, samotný ref.
A proč const, když se číslo mění? Protože salky je pořád stejná krabička, mění se jen to, co je uvnitř. salky.value++ mění vnitřek, a to const dovoluje. Nedovoluje dát něco jiného do samotné proměnné salky, a to stejně nikdy nechcete: Vue by o hodnotě přestalo vědět. Refy jsou proto vždycky const.
Typické chyby:
salky++ve skriptu, bez.value. Pokusí se změnit konstantusalky, takže konzole hlásíTypeError: Assignment to constant variable.a stránka zůstane, jaká byla.{{ salky.value }}v šabloně. Tam už Vue ref rozbalilo, takžesalkyje číslo a číslo žádnévaluenemá. Stránka na tom místě neukáže nic.console.log(salky)vypíše krabičku, něco jakoRefImpl { dep: Dep { … }, __v_isRef: true, … _value: 2 }. Číslo uvidíte, když vypíšetesalky.value.
Jak psát:
Pokyny
- 1
Napište funkci
prodejJeden(), která ubere jeden koláč, ale jen když nějaký zbývá: číslo nikdy neklesne pod 0. Nastavte ji jako obsluhu kliknutí na Prodat jeden. - 2
Napište funkci
upecDalsi(), která přidá 6 koláčů, a nastavte ji jako obsluhu kliknutí na Upéct další. - 3
Pod počet přidejte odstavec s třídou
stav. Když nezbývá žádný koláč, bude v němVyprodáno!, jinakČerstvé z trouby. Použijte? :ve{{ }}.