Čeština

Prozkoumejte do hloubky Vue.js 3 Composition API. Naučte se tvořit znovupoužitelné, udržovatelné a testovatelné aplikace s praktickými příklady a osvědčenými postupy pro vývojáře po celém světě.

Vue.js 3 Composition API: Hloubkový ponor pro globální vývojáře

Vue.js se rychle stalo populární volbou pro tvorbu moderních webových aplikací díky své přístupné křivce učení a výkonným funkcím. Vue.js 3 jde ještě dál s představením Composition API, nového způsobu organizace logiky vašich komponent. Tento hloubkový pohled poskytuje komplexního průvodce pro pochopení a efektivní využití Composition API, který vás vybaví dovednostmi pro tvorbu udržitelnějších, znovupoužitelných a testovatelných Vue aplikací.

Co je to Composition API?

Composition API je sada API, která nám umožňuje vytvářet Vue komponenty pomocí importovaných funkcí namísto deklarování možností. V podstatě vám umožňuje seskupit související logiku dohromady, bez ohledu na to, kde se v šabloně objeví. To je v kontrastu s Options API (data, methods, computed, watch), které vás nutí organizovat kód na základě těchto předdefinovaných kategorií. Představte si Options API jako organizaci kódu podle toho, *co to je* (data, metoda atd.), zatímco Composition API vám umožňuje organizovat kód podle toho, *co dělá*.

Jádro Composition API se točí kolem funkce setup(). Tato funkce je vstupním bodem pro využití Composition API v rámci komponenty. Uvnitř setup() můžete definovat reaktivní stav, počítané vlastnosti, metody a háčky životního cyklu pomocí kompozitních funkcí.

Proč používat Composition API?

Composition API nabízí několik výhod oproti tradičnímu Options API, zejména pro větší a složitější aplikace:

Pochopení základních konceptů

Pojďme se ponořit do klíčových konceptů, které tvoří základ Composition API:

1. setup()

Jak bylo zmíněno dříve, setup() je vstupním bodem pro použití Composition API. Je to možnost komponenty, která se provádí před vytvořením komponenty. Uvnitř setup() definujete reaktivní stav, počítané vlastnosti, metody a háčky životního cyklu a poté vracíte objekt obsahující hodnoty, které chcete zpřístupnit šabloně.

Příklad:

import { ref } from 'vue'

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

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

    return {
      count,
      increment
    }
  }
}

V tomto příkladu používáme ref k vytvoření reaktivní proměnné nazvané count. Také definujeme metodu increment, která zvyšuje hodnotu count. Nakonec vracíme objekt obsahující count a increment, což je zpřístupní v šabloně komponenty.

2. Reaktivní stav s ref a reactive

Composition API poskytuje dvě základní funkce pro vytváření reaktivního stavu: ref a reactive.

Příklad s použitím ref:

import { ref } from 'vue'

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

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

    return {
      message,
      updateMessage
    }
  }
}

Příklad s použitím reactive:

import { reactive } from 'vue'

export default {
  setup() {
    const state = reactive({
      name: 'John Doe',
      age: 30
    })

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

    return {
      state,
      updateName
    }
  }
}

3. Počítané vlastnosti s computed

Počítané vlastnosti jsou hodnoty, které jsou odvozeny od jiného reaktivního stavu. Jsou automaticky aktualizovány, kdykoli se jejich závislosti změní. Funkce computed přijímá jako argument getter funkci a vrací reaktivní ref objekt pouze pro čtení.

Příklad:

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('John')
    const lastName = ref('Doe')

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

    return {
      firstName,
      lastName,
      fullName
    }
  }
}

V tomto příkladu je fullName počítaná vlastnost, která závisí na firstName a lastName. Kdykoli se firstName nebo lastName změní, fullName bude automaticky aktualizováno.

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

Sledovače (Watchers) vám umožňují reagovat na změny v reaktivním stavu. Composition API poskytuje dva hlavní způsoby, jak vytvořit sledovače: watch a watchEffect.

Příklad s použitím watch:

import { ref, watch } from 'vue'

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

    watch(
      count,
      (newValue, oldValue) => {
        console.log(`Count changed from ${oldValue} to ${newValue}`)
      }
    )

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

    return {
      count,
      increment
    }
  }
}

Příklad s použitím watchEffect:

import { ref, watchEffect } from 'vue'

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

    watchEffect(() => {
      console.log(`Message is: ${message.value}`)
    })

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

    return {
      message,
      updateMessage
    }
  }
}

5. Háčky životního cyklu

Composition API poskytuje přístup k háčkům životního cyklu komponenty prostřednictvím funkcí, které začínají na on, jako jsou onMounted, onUpdated a onUnmounted. Tyto funkce přijímají jako argument callback, který se provede, když je spuštěn odpovídající háček životního cyklu.

Příklad:

import { onMounted, onUnmounted } from 'vue'

export default {
  setup() {
    onMounted(() => {
      console.log('Component is mounted')
    })

    onUnmounted(() => {
      console.log('Component is unmounted')
    })

    return {}
  }
}

Tvorba kompozitních funkcí (Composables)

Skutečná síla Composition API spočívá ve schopnosti vytvářet znovupoužitelné kompozitní funkce. Kompozitní funkce je jednoduše funkce, která zapouzdřuje část logiky komponenty a vrací reaktivní stav a funkce, které lze použít ve více komponentách.

Příklad: Vytvořme kompozitní funkci, která sleduje pozici 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
  }
}

Nyní můžete tuto kompozitní funkci použít v jakékoli komponentě:

import { useMousePosition } from './useMousePosition'

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

    return {
      x,
      y
    }
  }
}

Praktické příklady a případy použití

Pojďme prozkoumat několik praktických příkladů, jak lze Composition API použít v reálných scénářích:

1. Načítání dat

Vytvoření kompozitní funkce pro načítání dat z API je běžným případem použití. To vám umožňuje znovu použít stejnou logiku pro načítání dat napříč více komponentami.

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

Tuto kompozitní funkci pak můžete ve svých komponentách použít takto:

import { useFetch } from './useFetch'

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

    return {
      data,
      error,
      loading
    }
  }
}

2. Validace formulářů

Validace formulářů je další oblastí, kde může být Composition API velmi nápomocné. Můžete vytvářet kompozitní funkce, které zapouzdřují validační logiku a znovu je používat napříč různými formuláři.

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 = 'This field is required'
        break
      } else if (rule === 'email' && !/^[^\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(value)) {
        error = 'Invalid email format'
        break
      }
    }

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

  return {
    errors,
    validateField
  }
}

Použití v komponentě:

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 ověřování uživatelů

Ověřovací logika může být často složitá a duplikovaná napříč více komponentami. Composition API vám umožňuje vytvořit kompozitní funkci, která zapouzdřuje veškerou ověřovací logiku a poskytuje čisté API pro použití ve vašich komponentách.

Příklad: (Zjednodušený)

import { ref } from 'vue'

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

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

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

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Osvědčené postupy pro používání Composition API

Abyste z Composition API vytěžili maximum, zvažte následující osvědčené postupy:

Běžné nástrahy a jak se jim vyhnout

Ačkoli Composition API nabízí mnoho výhod, existují také některé běžné nástrahy, na které je třeba si dát pozor:

Composition API a globální týmy

Composition API podporuje spolupráci v rámci globálních vývojářských týmů tím, že prosazuje:

Závěr

Vue.js 3 Composition API je mocný nástroj, který může výrazně zlepšit organizaci, znovupoužitelnost a testovatelnost vašich Vue aplikací. Pochopením základních konceptů a dodržováním osvědčených postupů uvedených v tomto hloubkovém pohledu můžete využít Composition API k tvorbě udržitelnějších a škálovatelnějších aplikací pro globální publikum. Přijměte Composition API a odemkněte plný potenciál Vue.js 3.

Doporučujeme vám experimentovat s Composition API ve vašich vlastních projektech a prozkoumat obrovské možnosti, které nabízí. Šťastné kódování!