Norsk

Utforsk Vue.js 3 Composition API i dybden. Lær å bygge gjenbrukbare, vedlikeholdbare og testbare Vue.js-applikasjoner med praktiske eksempler og beste praksis for utviklere verden over.

Vue.js 3 Composition API: En Dybdeanalyse for Globale Utviklere

Vue.js har raskt blitt et populært valg for å bygge moderne webapplikasjoner, takket være sin tilgjengelige læringskurve og kraftige funksjoner. Vue.js 3 tar dette videre med introduksjonen av Composition API, en ny måte å organisere komponentlogikken din på. Denne dybdeanalysen gir en omfattende guide til å forstå og bruke Composition API effektivt, og utstyrer deg med ferdighetene til å bygge mer vedlikeholdbare, gjenbrukbare og testbare Vue-applikasjoner.

Hva er Composition API?

Composition API er et sett med API-er som lar oss skrive Vue-komponenter ved hjelp av importerte funksjoner i stedet for å deklarere alternativer. I hovedsak lar det deg gruppere relatert logikk sammen, uavhengig av hvor den vises i malen. Dette står i kontrast til Options API (data, methods, computed, watch), som tvinger deg til å organisere kode basert på disse forhåndsdefinerte kategoriene. Tenk på Options API som å organisere koden din etter *hva* den er (data, metode, etc.), mens Composition API lar deg organisere koden etter *hva den gjør*.

Kjernen i Composition API dreier seg om setup()-funksjonen. Denne funksjonen er inngangspunktet for å bruke Composition API i en komponent. Inne i setup() kan du definere reaktiv tilstand, beregnede egenskaper, metoder og livssykluskroker ved hjelp av komponerbare funksjoner.

Hvorfor bruke Composition API?

Composition API tilbyr flere fordeler over det tradisjonelle Options API, spesielt for større og mer komplekse applikasjoner:

Forstå kjernekonseptene

La oss dykke inn i nøkkelkonseptene som ligger til grunn for Composition API:

1. setup()

Som nevnt tidligere, er setup() inngangspunktet for å bruke Composition API. Det er et komponentalternativ som kjøres før komponenten opprettes. Inne i setup() definerer du reaktiv tilstand, beregnede egenskaper, metoder og livssykluskroker, og returnerer deretter et objekt som inneholder verdiene du vil eksponere for malen.

Eksempel:

import { ref } from 'vue'

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

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

    return {
      count,
      increment
    }
  }
}

I dette eksempelet bruker vi ref for å lage en reaktiv variabel kalt count. Vi definerer også en metode kalt increment som øker verdien til count. Til slutt returnerer vi et objekt som inneholder count og increment, noe som gjør dem tilgjengelige i komponentens mal.

2. Reaktiv tilstand med ref og reactive

Composition API gir to kjernefunksjoner for å skape reaktiv tilstand: ref og reactive.

Eksempel med ref:

import { ref } from 'vue'

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

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

    return {
      message,
      updateMessage
    }
  }
}

Eksempel med 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. Beregnede egenskaper med computed

Beregnede egenskaper er verdier som er utledet fra annen reaktiv tilstand. De oppdateres automatisk når deres avhengigheter endres. Funksjonen computed tar en "getter"-funksjon som argument og returnerer en skrivebeskyttet reaktiv ref.

Eksempel:

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

I dette eksempelet er fullName en beregnet egenskap som avhenger av firstName og lastName. Når enten firstName eller lastName endres, vil fullName automatisk bli oppdatert.

4. "Watchers" med watch og watchEffect

"Watchers" lar deg reagere på endringer i reaktiv tilstand. Composition API gir to hovedmåter å lage "watchers" på: watch og watchEffect.

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

Eksempel med 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. Livssykluskroker

Composition API gir tilgang til komponentens livssykluskroker gjennom funksjoner som starter med on, som for eksempel onMounted, onUpdated og onUnmounted. Disse funksjonene tar en callback som argument, som vil bli kjørt når den tilsvarende livssykluskroken utløses.

Eksempel:

import { onMounted, onUnmounted } from 'vue'

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

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

    return {}
  }
}

Lage komponerbare funksjoner

Den virkelige kraften i Composition API kommer fra muligheten til å lage gjenbrukbare komponerbare funksjoner. En komponerbar funksjon er rett og slett en funksjon som innkapsler en del av komponentlogikken og returnerer reaktiv tilstand og funksjoner som kan brukes i flere komponenter.

Eksempel: La oss lage en komponerbar funksjon som sporer museposisjonen:

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

Nå kan du bruke denne komponerbare funksjonen i hvilken som helst komponent:

import { useMousePosition } from './useMousePosition'

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

    return {
      x,
      y
    }
  }
}

Praktiske eksempler og bruksområder

La oss utforske noen praktiske eksempler på hvordan Composition API kan brukes i virkelige scenarier:

1. Datahenting

Å lage en komponerbar funksjon for å hente data fra et API er et vanlig bruksområde. Dette lar deg gjenbruke den samme datahentingslogikken på tvers av flere komponenter.

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

Du kan deretter bruke denne komponerbare funksjonen i komponentene dine slik:

import { useFetch } from './useFetch'

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

    return {
      data,
      error,
      loading
    }
  }
}

2. Skjemavalidering

Skjemavalidering er et annet område hvor Composition API kan være veldig nyttig. Du kan lage komponerbare funksjoner som innkapsler valideringslogikk og gjenbruke dem på tvers av forskjellige skjemaer.

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' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
        error = 'Invalid email format'
        break
      }
    }

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

  return {
    errors,
    validateField
  }
}

Bruk i en 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. Håndtere brukerautentisering

Autentiseringslogikk kan ofte være kompleks og dupliseres på tvers av flere komponenter. Composition API lar deg lage en komponerbar funksjon som innkapsler all autentiseringslogikken og gir et rent API for komponentene dine å bruke.

Eksempel: (Forenklet)

import { ref } from 'vue'

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

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

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

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Beste praksis for bruk av Composition API

For å få mest mulig ut av Composition API, bør du vurdere følgende beste praksis:

Vanlige fallgruver og hvordan unngå dem

Selv om Composition API tilbyr mange fordeler, er det også noen vanlige fallgruver man bør være klar over:

Composition API og globale team

Composition API fremmer samarbeid i globale utviklingsteam ved å fremme:

Konklusjon

Vue.js 3 Composition API er et kraftig verktøy som kan betydelig forbedre organiseringen, gjenbrukbarheten og testbarheten til dine Vue-applikasjoner. Ved å forstå kjernekonseptene og følge de beste praksisene som er beskrevet i denne dybdeanalysen, kan du utnytte Composition API til å bygge mer vedlikeholdbare og skalerbare applikasjoner for et globalt publikum. Omfavn Composition API og lås opp det fulle potensialet til Vue.js 3.

Vi oppfordrer deg til å eksperimentere med Composition API i dine egne prosjekter og utforske de enorme mulighetene det tilbyr. God koding!