Suomi

Tutustu syvällisesti Vue.js 3:n Composition API:hin. Opi rakentamaan uudelleenkäytettäviä, ylläpidettäviä ja testattavia Vue.js-sovelluksia käytännön esimerkkien ja parhaiden käytäntöjen avulla maailmanlaajuisille kehittäjille.

Vue.js 3 Composition API: Syväsukellus kansainvälisille kehittäjille

Vue.js:stä on nopeasti tullut suosittu valinta nykyaikaisten verkkosovellusten rakentamiseen sen helpon omaksuttavuuden ja tehokkaiden ominaisuuksien ansiosta. Vue.js 3 vie tämän pidemmälle esittelemällä Composition API:n, uuden tavan järjestellä komponenttien logiikkaa. Tämä syväsukellus tarjoaa kattavan oppaan Composition API:n ymmärtämiseen ja tehokkaaseen hyödyntämiseen, antaen sinulle taidot rakentaa ylläpidettävämpiä, uudelleenkäytettävämpiä ja testattavampia Vue-sovelluksia.

Mitä on Composition API?

Composition API on joukko ohjelmointirajapintoja, joiden avulla voimme luoda Vue-komponentteja käyttämällä tuotuja funktioita sen sijaan, että määrittelisimme asetuksia. Pohjimmiltaan se antaa sinun ryhmitellä toisiinsa liittyvää logiikkaa yhteen, riippumatta siitä, missä se esiintyy templaatissa. Tämä on vastakohta Options API:lle (data, methods, computed, watch), joka pakottaa sinut järjestämään koodin näiden ennalta määriteltyjen kategorioiden mukaan. Ajattele Options API:ta siten, että se järjestää koodisi sen mukaan, *mitä* se on (dataa, metodi jne.), kun taas Composition API antaa sinun järjestää koodin sen mukaan, *mitä se tekee*.

Composition API:n ydin pyörii setup()-funktion ympärillä. Tämä funktio on aloituspiste Composition API:n hyödyntämiselle komponentin sisällä. setup()-funktion sisällä voit määrittää reaktiivista tilaa, laskettuja ominaisuuksia, metodeja ja elinkaarikoukkuja käyttämällä koostettavia funktioita.

Miksi käyttää Composition API:ta?

Composition API tarjoaa useita etuja perinteiseen Options API:hin verrattuna, erityisesti suurissa ja monimutkaisissa sovelluksissa:

Ydinkäsitteiden ymmärtäminen

Sukelletaanpa Composition API:n taustalla oleviin avainkäsitteisiin:

1. setup()

Kuten aiemmin mainittiin, setup() on aloituspiste Composition API:n käyttämiselle. Se on komponentin asetus, joka suoritetaan ennen komponentin luomista. setup()-funktion sisällä määrität reaktiivisen tilan, lasketut ominaisuudet, metodit ja elinkaarikoukut, ja palautat sitten objektin, joka sisältää ne arvot, jotka haluat paljastaa templaatille.

Esimerkki:

import { ref } from 'vue'

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

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

    return {
      count,
      increment
    }
  }
}

Tässä esimerkissä käytämme ref-funktiota luodaksemme reaktiivisen muuttujan nimeltä count. Määritämme myös metodin nimeltä increment, joka kasvattaa count-muuttujan arvoa. Lopuksi palautamme objektin, joka sisältää count- ja increment-muuttujat, mikä tekee niistä saatavilla komponentin templaatissa.

2. Reaktiivinen tila ref- ja reactive-funktioilla

Composition API tarjoaa kaksi ydinfunktiota reaktiivisen tilan luomiseen: ref ja reactive.

Esimerkki ref-funktion käytöstä:

import { ref } from 'vue'

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

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

    return {
      message,
      updateMessage
    }
  }
}

Esimerkki reactive-funktion käytöstä:

import { reactive } from 'vue'

export default {
  setup() {
    const state = reactive({
      name: 'Matti Meikäläinen',
      age: 30
    })

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

    return {
      state,
      updateName
    }
  }
}

3. Lasketut ominaisuudet computed-funktiolla

Lasketut ominaisuudet ovat arvoja, jotka johdetaan muusta reaktiivisesta tilasta. Ne päivittyvät automaattisesti aina, kun niiden riippuvuudet muuttuvat. computed-funktio ottaa argumenttina getter-funktion ja palauttaa vain luku -muotoisen reaktiivisen ref-objektin.

Esimerkki:

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('Matti')
    const lastName = ref('Meikäläinen')

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

    return {
      firstName,
      lastName,
      fullName
    }
  }
}

Tässä esimerkissä fullName on laskettu ominaisuus, joka riippuu firstName- ja lastName-muuttujista. Aina kun joko firstName tai lastName muuttuu, fullName päivittyy automaattisesti.

4. Seuraajat watch- ja watchEffect-funktioilla

Seuraajien (watchers) avulla voit reagoida reaktiivisen tilan muutoksiin. Composition API tarjoaa kaksi päätapaa luoda seuraajia: watch ja watchEffect.

Esimerkki watch-funktion käytöstä:

import { ref, watch } from 'vue'

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

    watch(
      count,
      (newValue, oldValue) => {
        console.log(`Lukumäärä muuttui arvosta ${oldValue} arvoon ${newValue}`)
      }
    )

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

    return {
      count,
      increment
    }
  }
}

Esimerkki watchEffect-funktion käytöstä:

import { ref, watchEffect } from 'vue'

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

    watchEffect(() => {
      console.log(`Viesti on: ${message.value}`)
    })

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

    return {
      message,
      updateMessage
    }
  }
}

5. Elinkaarikoukut

Composition API tarjoaa pääsyn komponentin elinkaarikoukkuihin on-alkuisten funktioiden kautta, kuten onMounted, onUpdated ja onUnmounted. Nämä funktiot ottavat argumenttina takaisinkutsun, joka suoritetaan, kun vastaava elinkaarikoukku laukeaa.

Esimerkki:

import { onMounted, onUnmounted } from 'vue'

export default {
  setup() {
    onMounted(() => {
      console.log('Komponentti on liitetty')
    })

    onUnmounted(() => {
      console.log('Komponentti on poistettu')
    })

    return {}
  }
}

Koostettavien funktioiden luominen

Composition API:n todellinen voima piilee kyvyssä luoda uudelleenkäytettäviä koostettavia funktioita. Koostettava funktio on yksinkertaisesti funktio, joka kapseloi osan komponentin logiikasta ja palauttaa reaktiivisen tilan ja funktioita, joita voidaan käyttää useissa komponenteissa.

Esimerkki: Luodaan koostettava funktio, joka seuraa hiiren sijaintia:

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

Nyt voit käyttää tätä koostettavaa funktiota missä tahansa komponentissa:

import { useMousePosition } from './useMousePosition'

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

    return {
      x,
      y
    }
  }
}

Käytännön esimerkkejä ja käyttötapauksia

Tutkitaanpa joitakin käytännön esimerkkejä siitä, miten Composition API:ta voidaan käyttää todellisissa tilanteissa:

1. Datan nouto

Koostettavan funktion luominen datan noutamiseksi API:sta on yleinen käyttötapaus. Tämä mahdollistaa saman datanhakulogiikan uudelleenkäytön useissa komponenteissa.

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

Voit sitten käyttää tätä koostettavaa funktiota komponenteissasi näin:

import { useFetch } from './useFetch'

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

    return {
      data,
      error,
      loading
    }
  }
}

2. Lomakkeen validointi

Lomakkeen validointi on toinen alue, jossa Composition API voi olla erittäin hyödyllinen. Voit luoda koostettavia funktioita, jotka kapseloivat validointilogiikan ja käyttää niitä uudelleen eri lomakkeissa.

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 = 'Tämä kenttä on pakollinen'
        break
      } else if (rule === 'email' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
        error = 'Virheellinen sähköpostimuoto'
        break
      }
    }

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

  return {
    errors,
    validateField
  }
}

Käyttö komponentissa:

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. Käyttäjän todennuksen hallinta

Todennuslogiikka voi usein olla monimutkaista ja toistua useissa komponenteissa. Composition API antaa sinun luoda koostettavan funktion, joka kapseloi kaiken todennuslogiikan ja tarjoaa siistin rajapinnan komponenttiesi käyttöön.

Esimerkki: (Yksinkertaistettu)

import { ref } from 'vue'

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

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

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

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Parhaat käytännöt Composition API:n käyttöön

Saadaksesi parhaan hyödyn Composition API:sta, harkitse seuraavia parhaita käytäntöjä:

Yleiset sudenkuopat ja niiden välttäminen

Vaikka Composition API tarjoaa monia etuja, on myös joitakin yleisiä sudenkuoppia, joista on syytä olla tietoinen:

Composition API ja kansainväliset tiimit

Composition API edistää yhteistyötä kansainvälisissä kehitystiimeissä edistämällä:

Yhteenveto

Vue.js 3:n Composition API on tehokas työkalu, joka voi merkittävästi parantaa Vue-sovellustesi organisointia, uudelleenkäytettävyyttä ja testattavuutta. Ymmärtämällä ydinkäsitteet ja noudattamalla tässä syväsukelluksessa esitettyjä parhaita käytäntöjä voit hyödyntää Composition API:ta rakentaaksesi ylläpidettävämpiä ja skaalautuvampia sovelluksia maailmanlaajuiselle yleisölle. Ota Composition API omaksesi ja avaa Vue.js 3:n koko potentiaali.

Kannustamme sinua kokeilemaan Composition API:ta omissa projekteissasi ja tutkimaan sen tarjoamia laajoja mahdollisuuksia. Hyvää koodausta!