Skip to content
Az oldal tartalma

Composition API

A Composition API egy komponens leíró API, hasonlóan az Options APi-hoz. Valójában a háttérben az előző API is ezt használja fel.

Options APIComposition API
Objektumot használ leírásraSpeciális függvényben valósul meg
Szigorúan meghatározott struktúraSzabad kódrendezés
Nem bővíthető és nem lehet logikát kiemelniLehetőség van tetszőleges logikát kiemelni, újra felhasználhatóvá tenni
Kisebb projektekre és komponensekre jobbNagyobb projektekhez és összetettebb komponensekhez ajánlott

setup() függyvény

A függvény az Options API-ban fog helyet foglalni, hasonlóan a data() függvényhez.

A függvényben tetszőleges ECMAScript logikát meg tudunk valósítani.

Ami fontos és nagyon figyelni kell rá, hogy csak az lesz elérhető a <template>-ben, amit visszadtaunk, egy objektumba ágyazva.

Tetszőleges dolgot át tudunk emelni az Options API-ból, ezeket paraméterként tudjuk odaadni a setup() függvénynek.

<script setup>

Ez előző egysezerűsítésére használhatjuk a setup attribútummal ellátott blokkot. Így ebben a blokkban már csak és kizárólag a setup() függvény törzse lesz benne.

Ami könnyebbség még, hogy nem kell visszaadnunk semmit, azt a háttérben kezeli a keretrendszer számunka.

Állapotok tárolása

Az állapotainkat mostmár egyszerű változóként fogjuk tárolni, így könnyebb lesz velükk dolgozni. Ennek a megoldásnak azonban az lesz a hátránya, hogy a reaktivitás képességét elveszítik ezek a változók. Ennek a megoldására két lehetőségünk van, az alábbi függvényebe csomagolva az értékeinket továbbra is reaktívak lesznek.

ref()

Csak és kizárólag egyszerű típusokat tudunk ezzel a megoldással használni, és figyelni kell rá, hogy a tényleges értéket a .valuen keresztül fogjuk tudni elérni az scripten belül.

javascript
import { ref } from 'vue';
//...
const name = "Papp Zsombor";
//...
name.value = "Kocsis Zsolt";

reactive()

Az elözővel szembern, ezt a függvényt csak összetett típusokra, adatszerkezetekre tudjuk felhasználni. Viszont nagy különbség a társához képes, hogy nem kell semmilyen segítség ahhoz, hogy elérjük a benne levő értékeket. Mindemellett az objektumunk teljes mélységében képesek vagyunk módosítani.

javascript
import { reactive } from 'vue';
//...
const shoppingList = ['milk','bread','egg'];
//...
shoppingList.push('cheese');

computed()

A számított állapotunk úgy fog átalakulni, hogy a computed() függvény számára adjuk oda azt a függvényt ami előállítja. Ez segít nekünk abban is, hogy a tényleges felületet csak akkor frissítsük, ha érdemi változás történik. Ha minden állapotunk változik, azt kivéve, amiből számolunk, akkor egész egyszerűen a függvényünket nem fogja feleselgesen lefuttatni a vue.

javascript
import { computed, reactive } from 'vue';
//...
const books = reactive(["The Hitchhiker's Guide to the Galaxy", "Gulliver's Travels"]);
//...
const numberOfBooks = computed(()=>books.length);

watch()

Az Options API-ban használt változattól annyiban fogunk eltérni, hogy nem a név alapján fogunk hivatkozni a figyelt állapotra, hanem a konkrét figyelt állapotot adjuk meg neki, valamint a kezelő függvényt.

javascript
import {ref, watch} from 'vue';
//...
const question = ref('');
//...
watch(question,(updated){
  if(updated.includes('?')){
    getAnswer();
  }
});

defineProps() vagy props:

Az átadott tulajdonságok amik a legkevesebbet változnak, ugyanis ugyanazt az objektumot fogjuk létrehozni, csak kell csomagolnunk a defineProps() függvényben.

javascript
import { defineProps } from 'vue';
//...
const props = defineProps({id: Number, name: String});

Ha a setup() függvényes megoldást használjuk, akkor lehetőségünk van ezt az objektumot az Options API részeként létrehozni és csak átadjuk paraméterként.

javascript
import { defineProps } from 'vue';
export default{
  props: {
    id: Number,
    name: String
  },
  setup(props){
    //...
  }
}

defineEmits() vagy emits:

Az előzőhöz teljes mértékben hasonlóan működik az állapotok hirdetése.

javascript
import { defineEmits } from 'vue';
//...
const emits = defineEmits(['deleteItem','editItem']);

setup() függvény és Options API segítségével:

javascript
import { defineProps } from 'vue';
export default{
  emits: ['deleteItem','editItem'],
  setup(emits){
    //...
  }
}

Életciklus

onMounted()

Az életciklus eseményeinek kezelése úgy alakul át, hogy minden függvényünk egy on előtagot kap valamint, a kezdő betűnk nagyra vált. Ezen kívül a végrehajtani kívánt függvényt paraméterként tudjuk átadni neki.

javascript
import { onMounted } from 'vue';
//...
onMounted(()=>getData());

Példák

Számláló setup() függvénnyel

HTML
<script>
import {ref} from 'vue';
export default{
  setup(){
    const count = ref(0);

    const increment = () => count.value++;
    const decrement = () => count.value--;
    
    return {count, increment, decrement}
  }
}
</script>
<template>
  <h1>{{count}}</h1>
  <button @click="increment">+</button>
  <button @click="decrement">-</button>
</template>

Számáló <script setup>

HTML
<script setup>
import {ref} from 'vue';

const count = ref(0);

const increment = () => count.value++;
const decrement = () => count.value--;
</script>

<template>
  <h1>{{count}}</h1>
  <button @click="increment">+</button>
  <button @click="decrement">-</button>
</template>

Ellenőrző kérdések

\pagebreak

A tananyag jelenlegi verziója: 4.0.0