Nederlands

Verken de Vue.js 3 Composition API tot in detail. Leer hoe u herbruikbare, onderhoudbare en testbare Vue.js-applicaties bouwt met praktische voorbeelden en best practices voor ontwikkelaars wereldwijd.

Vue.js 3 Composition API: Een Diepgaande Gids voor Wereldwijde Ontwikkelaars

Vue.js is snel een populaire keuze geworden voor het bouwen van moderne webapplicaties, dankzij de toegankelijke leercurve en krachtige functies. Vue.js 3 gaat nog een stap verder met de introductie van de Composition API, een nieuwe manier om de logica van uw componenten te organiseren. Deze diepgaande gids biedt een uitgebreide handleiding om de Composition API effectief te begrijpen en te gebruiken, en voorziet u van de vaardigheden om beter onderhoudbare, herbruikbare en testbare Vue-applicaties te bouwen.

Wat is de Composition API?

De Composition API is een set API's die ons in staat stelt om Vue-componenten te schrijven met behulp van geïmporteerde functies in plaats van opties te declareren. In wezen stelt het u in staat om gerelateerde logica te groeperen, ongeacht waar deze in de template verschijnt. Dit staat in contrast met de Options API (data, methods, computed, watch), die u dwingt code te organiseren op basis van deze vooraf gedefinieerde categorieën. Zie de Options API als het organiseren van uw code op basis van *wat* het is (data, methode, etc.), terwijl de Composition API u de code laat organiseren op basis van *wat het doet*.

De kern van de Composition API draait om de setup()-functie. Deze functie is het startpunt voor het gebruik van de Composition API binnen een component. Binnen setup() kunt u reactieve state, computed properties, methoden en lifecycle hooks definiëren met behulp van composable functies.

Waarom de Composition API gebruiken?

De Composition API biedt verschillende voordelen ten opzichte van de traditionele Options API, met name voor grotere en complexere applicaties:

De Kernconcepten Begrijpen

Laten we dieper ingaan op de belangrijkste concepten die de basis vormen van de Composition API:

1. setup()

Zoals eerder vermeld, is setup() het startpunt voor het gebruik van de Composition API. Het is een componentoptie die wordt uitgevoerd voordat de component wordt gecreëerd. Binnen setup() definieert u reactieve state, computed properties, methoden en lifecycle hooks, en retourneert u vervolgens een object met de waarden die u aan de template wilt blootstellen.

Voorbeeld:

import { ref } from 'vue'

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

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

    return {
      count,
      increment
    }
  }
}

In dit voorbeeld gebruiken we ref om een reactieve variabele genaamd count te maken. We definiëren ook een methode genaamd increment die de waarde van count verhoogt. Ten slotte retourneren we een object met count en increment, waardoor ze beschikbaar zijn in de template van de component.

2. Reactieve State met ref en reactive

De Composition API biedt twee kernfuncties voor het creëren van reactieve state: ref en reactive.

Voorbeeld met ref:

import { ref } from 'vue'

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

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

    return {
      message,
      updateMessage
    }
  }
}

Voorbeeld met reactive:

import { reactive } from 'vue'

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

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

    return {
      state,
      updateName
    }
  }
}

3. Computed Properties met computed

Computed properties zijn waarden die worden afgeleid van andere reactieve state. Ze worden automatisch bijgewerkt wanneer hun afhankelijkheden veranderen. De computed-functie neemt een getter-functie als argument en retourneert een alleen-lezen reactieve ref.

Voorbeeld:

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('Jan')
    const lastName = ref('Jansen')

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

    return {
      firstName,
      lastName,
      fullName
    }
  }
}

In dit voorbeeld is fullName een computed property die afhankelijk is van firstName en lastName. Telkens wanneer firstName of lastName verandert, wordt fullName automatisch bijgewerkt.

4. Watchers met watch en watchEffect

Watchers stellen u in staat om te reageren op veranderingen in reactieve state. De Composition API biedt twee belangrijke manieren om watchers te creëren: watch en watchEffect.

Voorbeeld met watch:

import { ref, watch } from 'vue'

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

    watch(
      count,
      (newValue, oldValue) => {
        console.log(`Aantal gewijzigd van ${oldValue} naar ${newValue}`)
      }
    )

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

    return {
      count,
      increment
    }
  }
}

Voorbeeld met watchEffect:

import { ref, watchEffect } from 'vue'

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

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

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

    return {
      message,
      updateMessage
    }
  }
}

5. Lifecycle Hooks

De Composition API biedt toegang tot de lifecycle hooks van componenten via functies die beginnen met on, zoals onMounted, onUpdated en onUnmounted. Deze functies nemen een callback als argument, die wordt uitgevoerd wanneer de overeenkomstige lifecycle hook wordt geactiveerd.

Voorbeeld:

import { onMounted, onUnmounted } from 'vue'

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

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

    return {}
  }
}

Composable Functies Creëren

De echte kracht van de Composition API komt van de mogelijkheid om herbruikbare composable functies te creëren. Een composable functie is simpelweg een functie die een stuk componentlogica inkapselt en reactieve state en functies retourneert die in meerdere componenten kunnen worden gebruikt.

Voorbeeld: Laten we een composable functie maken die de muispositie volgt:

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

Nu kunt u deze composable functie in elk component gebruiken:

import { useMousePosition } from './useMousePosition'

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

    return {
      x,
      y
    }
  }
}

Praktische Voorbeelden en Gebruiksscenario's

Laten we enkele praktische voorbeelden bekijken van hoe de Composition API kan worden gebruikt in real-world scenario's:

1. Data Ophalen

Het creëren van een composable functie voor het ophalen van data van een API is een veelvoorkomend gebruiksscenario. Dit stelt u in staat om dezelfde logica voor data ophalen in meerdere componenten te hergebruiken.

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

U kunt deze composable functie vervolgens in uw componenten als volgt gebruiken:

import { useFetch } from './useFetch'

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

    return {
      data,
      error,
      loading
    }
  }
}

2. Formuliervalidatie

Formuliervalidatie is een ander gebied waar de Composition API zeer nuttig kan zijn. U kunt composable functies creëren die validatielogica inkapselen en deze hergebruiken in verschillende formulieren.

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 = 'Dit veld is verplicht'
        break
      } else if (rule === 'email' && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(value)) {
        error = 'Ongeldig e-mailformaat'
        break
      }
    }

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

  return {
    errors,
    validateField
  }
}

Gebruik in een component:

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. Gebruikersauthenticatie Beheren

Authenticatielogica kan vaak complex zijn en gedupliceerd worden over meerdere componenten. De Composition API stelt u in staat om een composable functie te creëren die alle authenticatielogica inkapselt en een schone API biedt voor uw componenten om te gebruiken.

Voorbeeld: (Vereenvoudigd)

import { ref } from 'vue'

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

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

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

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Best Practices voor het Gebruik van de Composition API

Overweeg de volgende best practices om het meeste uit de Composition API te halen:

Veelvoorkomende Valkuilen en Hoe Ze te Vermijden

Hoewel de Composition API veel voordelen biedt, zijn er ook enkele veelvoorkomende valkuilen waar u op moet letten:

De Composition API en Wereldwijde Teams

De Composition API bevordert de samenwerking binnen wereldwijde ontwikkelingsteams door het volgende te promoten:

Conclusie

De Vue.js 3 Composition API is een krachtig hulpmiddel dat de organisatie, herbruikbaarheid en testbaarheid van uw Vue-applicaties aanzienlijk kan verbeteren. Door de kernconcepten te begrijpen en de best practices in deze diepgaande gids te volgen, kunt u de Composition API benutten om beter onderhoudbare en schaalbare applicaties te bouwen voor een wereldwijd publiek. Omarm de Composition API en ontgrendel het volledige potentieel van Vue.js 3.

We moedigen u aan om te experimenteren met de Composition API in uw eigen projecten en de enorme mogelijkheden te verkennen die het biedt. Veel codeerplezier!