Slovenčina

Hĺbkový prieskum Vue.js 3 Composition API. Naučte sa tvoriť opakovane použiteľné, udržiavateľné a testovateľné Vue.js aplikácie s praktickými príkladmi a osvedčenými postupmi pre vývojárov z celého sveta.

Vue.js 3 Composition API: Hĺbkový pohľad pre globálnych vývojárov

Vue.js sa rýchlo stalo obľúbenou voľbou pre tvorbu moderných webových aplikácií vďaka svojej prístupnej krivke učenia a výkonným funkciám. Vue.js 3 to posúva ešte ďalej zavedením Composition API, nového spôsobu organizácie logiky vašich komponentov. Tento hĺbkový pohľad poskytuje komplexného sprievodcu pre pochopenie a efektívne využívanie Composition API, čím vás vybaví zručnosťami na tvorbu udržiavateľnejších, opakovane použiteľných a testovateľných Vue aplikácií.

Čo je Composition API?

Composition API je sada API, ktorá nám umožňuje tvoriť Vue komponenty pomocou importovaných funkcií namiesto deklarovania možností. V podstate vám umožňuje zoskupiť súvisiacu logiku, bez ohľadu na to, kde sa objavuje v šablóne. To je v kontraste s Options API (data, methods, computed, watch), ktoré vás núti organizovať kód na základe týchto preddefinovaných kategórií. Predstavte si Options API ako organizovanie kódu podľa toho, *čo* to je (dáta, metóda atď.), zatiaľ čo Composition API vám umožňuje organizovať kód podľa toho, *čo robí*.

Jadrom Composition API je funkcia setup(). Táto funkcia je vstupným bodom pre využívanie Composition API v rámci komponentu. Vnútri setup() môžete definovať reaktívny stav, vypočítané vlastnosti, metódy a lifecycle hooks (háky životného cyklu) pomocou kompozitných funkcií (composable functions).

Prečo používať Composition API?

Composition API ponúka niekoľko výhod oproti tradičnému Options API, najmä pre väčšie a zložitejšie aplikácie:

Pochopenie základných konceptov

Poďme sa ponoriť do kľúčových konceptov, ktoré tvoria základ Composition API:

1. setup()

Ako už bolo spomenuté, setup() je vstupným bodom pre používanie Composition API. Je to možnosť komponentu, ktorá sa vykoná pred vytvorením komponentu. Vnútri setup() definujete reaktívny stav, vypočítané vlastnosti, metódy a lifecycle hooks a potom vrátite objekt obsahujúci hodnoty, ktoré chcete sprístupniť šablóne.

Príklad:

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)

    const increment = () => {
      count.value++
    }

    return {
      count,
      increment
    }
  }
}

V tomto príklade používame ref na vytvorenie reaktívnej premennej s názvom count. Tiež definujeme metódu s názvom increment, ktorá zvyšuje hodnotu count. Nakoniec vraciame objekt obsahujúci count a increment, čo ich sprístupňuje v šablóne komponentu.

2. Reaktívny stav s ref a reactive

Composition API poskytuje dve základné funkcie na vytvorenie reaktívneho stavu: ref a reactive.

Príklad s použitím ref:

import { ref } from 'vue'

export default {
  setup() {
    const message = ref('Ahoj, Vue!')

    const updateMessage = (newMessage) => {
      message.value = newMessage
    }

    return {
      message,
      updateMessage
    }
  }
}

Príklad s použitím reactive:

import { reactive } from 'vue'

export default {
  setup() {
    const state = reactive({
      name: 'Ján Vzorový',
      age: 30
    })

    const updateName = (newName) => {
      state.name = newName
    }

    return {
      state,
      updateName
    }
  }
}

3. Vypočítané vlastnosti s computed

Vypočítané vlastnosti sú hodnoty, ktoré sú odvodené od iného reaktívneho stavu. Automaticky sa aktualizujú vždy, keď sa zmenia ich závislosti. Funkcia computed prijíma ako argument getter funkciu a vracia reaktívny ref iba na čítanie.

Príklad:

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('Ján')
    const lastName = ref('Vzorový')

    const fullName = computed(() => {
      return `${firstName.value} ${lastName.value}`
    })

    return {
      firstName,
      lastName,
      fullName
    }
  }
}

V tomto príklade je fullName vypočítaná vlastnosť, ktorá závisí od firstName a lastName. Kedykoľvek sa zmení firstName alebo lastName, fullName sa automaticky aktualizuje.

4. Sledovače (watchers) s watch a watchEffect

Sledovače vám umožňujú reagovať na zmeny v reaktívnom stave. Composition API poskytuje dva hlavné spôsoby vytvárania sledovačov: watch a watchEffect.

Príklad s použitím watch:

import { ref, watch } from 'vue'

export default {
  setup() {
    const count = ref(0)

    watch(
      count,
      (newValue, oldValue) => {
        console.log(`Počet sa zmenil z ${oldValue} na ${newValue}`)
      }
    )

    const increment = () => {
      count.value++
    }

    return {
      count,
      increment
    }
  }
}

Príklad s použitím watchEffect:

import { ref, watchEffect } from 'vue'

export default {
  setup() {
    const message = ref('Ahoj')

    watchEffect(() => {
      console.log(`Správa je: ${message.value}`)
    })

    const updateMessage = (newMessage) => {
      message.value = newMessage
    }

    return {
      message,
      updateMessage
    }
  }
}

5. Lifecycle Hooks (háky životného cyklu)

Composition API poskytuje prístup k hákom životného cyklu komponentu prostredníctvom funkcií, ktoré začínajú na on, ako napríklad onMounted, onUpdated a onUnmounted. Tieto funkcie prijímajú ako argument callback, ktorý sa vykoná, keď sa spustí príslušný hák životného cyklu.

Príklad:

import { onMounted, onUnmounted } from 'vue'

export default {
  setup() {
    onMounted(() => {
      console.log('Komponent je pripojený (mounted)')
    })

    onUnmounted(() => {
      console.log('Komponent je odpojený (unmounted)')
    })

    return {}
  }
}

Vytváranie kompozitných funkcií (Composable Functions)

Skutočná sila Composition API spočíva v schopnosti vytvárať opakovane použiteľné kompozitné funkcie. Kompozitná funkcia je jednoducho funkcia, ktorá zapuzdruje časť logiky komponentu a vracia reaktívny stav a funkcie, ktoré možno použiť vo viacerých komponentoch.

Príklad: Vytvorme kompozitnú funkciu, ktorá sleduje polohu myši:

import { ref, onMounted, onUnmounted } from 'vue'

export function useMousePosition() {
  const x = ref(0)
  const y = ref(0)

  const updatePosition = (event) => {
    x.value = event.clientX
    y.value = event.clientY
  }

  onMounted(() => {
    window.addEventListener('mousemove', updatePosition)
  })

  onUnmounted(() => {
    window.removeEventListener('mousemove', updatePosition)
  })

  return {
    x,
    y
  }
}

Teraz môžete túto kompozitnú funkciu použiť v akomkoľvek komponente:

import { useMousePosition } from './useMousePosition'

export default {
  setup() {
    const { x, y } = useMousePosition()

    return {
      x,
      y
    }
  }
}

Praktické príklady a prípady použitia

Pozrime sa na niekoľko praktických príkladov, ako možno Composition API použiť v reálnych scenároch:

1. Získavanie dát (Data Fetching)

Vytvorenie kompozitnej funkcie na získavanie dát z API je bežným prípadom použitia. To vám umožňuje opakovane použiť rovnakú logiku na získavanie dát vo viacerých komponentoch.

import { ref, onMounted } from 'vue'

export function useFetch(url) {
  const data = ref(null)
  const error = ref(null)
  const loading = ref(true)

  onMounted(async () => {
    try {
      const response = await fetch(url)
      data.value = await response.json()
    } catch (err) {
      error.value = err
    } finally {
      loading.value = false
    }
  })

  return {
    data,
    error,
    loading
  }
}

Túto kompozitnú funkciu potom môžete použiť vo svojich komponentoch takto:

import { useFetch } from './useFetch'

export default {
  setup() {
    const { data, error, loading } = useFetch('https://api.example.com/data')

    return {
      data,
      error,
      loading
    }
  }
}

2. Validácia formulárov

Validácia formulárov je ďalšou oblasťou, kde môže byť Composition API veľmi nápomocné. Môžete vytvárať kompozitné funkcie, ktoré zapuzdrujú logiku validácie a opakovane ich používať v rôznych formulároch.

import { ref } from 'vue'

export function useValidation() {
  const errors = ref({})

  const validateField = (fieldName, value, rules) => {
    let error = null
    for (const rule of rules) {
      if (rule === 'required' && !value) {
        error = 'Toto pole je povinné'
        break
      } else if (rule === 'email' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
        error = 'Neplatný formát e-mailu'
        break
      }
    }

    if (error) {
      errors.value[fieldName] = error
    } else {
      delete errors.value[fieldName]
    }
  }

  return {
    errors,
    validateField
  }
}

Použitie v komponente:

import { useValidation } from './useValidation'
import { ref } from 'vue'

export default {
  setup() {
    const { errors, validateField } = useValidation()
    const email = ref('')

    const validateEmail = () => {
      validateField('email', email.value, ['required', 'email'])
    }

    return {
      email,
      errors,
      validateEmail
    }
  }
}

3. Správa autentifikácie používateľa

Logika autentifikácie môže byť často zložitá a duplikovaná vo viacerých komponentoch. Composition API vám umožňuje vytvoriť kompozitnú funkciu, ktorá zapuzdruje všetku logiku autentifikácie a poskytuje čisté API pre vaše komponenty.

Príklad: (Zjednodušený)

import { ref } from 'vue'

export function useAuth() {
  const isLoggedIn = ref(false)
  const user = ref(null)

  const login = async (username, password) => {
    // Simulácia volania API
    await new Promise(resolve => setTimeout(resolve, 1000))
    isLoggedIn.value = true
    user.value = { username }
  }

  const logout = async () => {
    // Simulácia volania API
    await new Promise(resolve => setTimeout(resolve, 1000))
    isLoggedIn.value = false
    user.value = null
  }

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Osvedčené postupy pre používanie Composition API

Ak chcete z Composition API vyťažiť maximum, zvážte nasledujúce osvedčené postupy:

Bežné nástrahy a ako sa im vyhnúť

Hoci Composition API ponúka mnoho výhod, existujú aj niektoré bežné nástrahy, na ktoré si treba dať pozor:

Composition API a globálne tímy

Composition API podporuje spoluprácu v rámci globálnych vývojárskych tímov tým, že podporuje:

Záver

Vue.js 3 Composition API je výkonný nástroj, ktorý môže výrazne zlepšiť organizáciu, znovupoužiteľnosť a testovateľnosť vašich Vue aplikácií. Porozumením základných konceptov a dodržiavaním osvedčených postupov uvedených v tomto hĺbkovom pohľade môžete využiť Composition API na tvorbu udržiavateľnejších a škálovateľnejších aplikácií pre globálne publikum. Osvojte si Composition API a odomknite plný potenciál Vue.js 3.

Odporúčame vám experimentovať s Composition API vo vašich vlastných projektoch a objavovať obrovské možnosti, ktoré ponúka. Šťastné kódovanie!