Svenska

Utforska Vue.js 3 Composition API. Lär dig bygga återanvändbara, underhållsbara och testbara Vue-appar med praktiska exempel och bästa praxis.

Vue.js 3 Composition API: En djupdykning för globala utvecklare

Vue.js har snabbt blivit ett populärt val för att bygga moderna webbapplikationer, tack vare sin lättillgängliga inlärningskurva och kraftfulla funktioner. Vue.js 3 tar detta vidare med introduktionen av Composition API, ett nytt sätt att organisera din komponentlogik. Denna djupdykning ger en omfattande guide för att förstå och effektivt använda Composition API, vilket ger dig färdigheterna att bygga mer underhållbara, återanvändbara och testbara Vue-applikationer.

Vad är Composition API?

Composition API är en uppsättning API:er som låter oss skriva Vue-komponenter med importerade funktioner istället för att deklarera alternativ. I grund och botten låter det dig gruppera relaterad logik tillsammans, oavsett var den förekommer i mallen. Detta står i kontrast till Options API (data, methods, computed, watch), som tvingar dig att organisera kod baserat på dessa fördefinierade kategorier. Tänk på Options API som att organisera din kod efter *vad* den är (data, metod, etc.), medan Composition API låter dig organisera kod efter *vad den gör*.

Kärnan i Composition API kretsar kring funktionen setup(). Denna funktion är ingångspunkten för att använda Composition API i en komponent. Inuti setup() kan du definiera reaktivt tillstånd, beräknade egenskaper, metoder och livscykelkrokar med hjälp av komposterbara funktioner.

Varför använda Composition API?

Composition API erbjuder flera fördelar jämfört med det traditionella Options API, särskilt för större och mer komplexa applikationer:

Förstå grundkoncepten

Låt oss dyka in i de nyckelkoncept som ligger till grund för Composition API:

1. setup()

Som nämnts tidigare är setup() ingångspunkten för att använda Composition API. Det är ett komponentalternativ som körs innan komponenten skapas. Inuti setup() definierar du reaktivt tillstånd, beräknade egenskaper, metoder och livscykelkrokar, och returnerar sedan ett objekt som innehåller de värden du vill exponera för mallen.

Exempel:

import { ref } from 'vue'

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

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

    return {
      count,
      increment
    }
  }
}

I det här exemplet använder vi ref för att skapa en reaktiv variabel som heter count. Vi definierar också en metod som heter increment som ökar värdet på count. Slutligen returnerar vi ett objekt som innehåller count och increment, vilket gör dem tillgängliga i komponentens mall.

2. Reaktivt tillstånd med ref och reactive

Composition API tillhandahåller två kärnfunktioner för att skapa reaktivt tillstånd: ref och reactive.

Exempel med ref:

import { ref } from 'vue'

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

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

    return {
      message,
      updateMessage
    }
  }
}

Exempel 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. Beräknade egenskaper med computed

Beräknade egenskaper är värden som härleds från annat reaktivt tillstånd. De uppdateras automatiskt när deras beroenden ändras. Funktionen computed tar en getter-funktion som argument och returnerar en skrivskyddad reaktiv ref.

Exempel:

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 det här exemplet är fullName en beräknad egenskap som är beroende av firstName och lastName. När antingen firstName eller lastName ändras, kommer fullName att uppdateras automatiskt.

4. "Watchers" med watch och watchEffect

"Watchers" (bevakare) låter dig reagera på förändringar i reaktivt tillstånd. Composition API erbjuder två huvudsakliga sätt att skapa watchers: watch och watchEffect.

Exempel med watch:

import { ref, watch } from 'vue'

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

    watch(
      count,
      (newValue, oldValue) => {
        console.log(`Antalet ändrades från ${oldValue} till ${newValue}`)
      }
    )

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

    return {
      count,
      increment
    }
  }
}

Exempel med watchEffect:

import { ref, watchEffect } from 'vue'

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

    watchEffect(() => {
      console.log(`Meddelandet är: ${message.value}`)
    })

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

    return {
      message,
      updateMessage
    }
  }
}

5. Livscykelkrokar

Composition API ger tillgång till komponentens livscykelkrokar genom funktioner som börjar med on, såsom onMounted, onUpdated och onUnmounted. Dessa funktioner tar en callback som argument, vilken kommer att köras när motsvarande livscykelkrok utlöses.

Exempel:

import { onMounted, onUnmounted } from 'vue'

export default {
  setup() {
    onMounted(() => {
      console.log('Komponenten har monterats')
    })

    onUnmounted(() => {
      console.log('Komponenten har avmonterats')
    })

    return {}
  }
}

Skapa komposterbara funktioner

Den verkliga kraften i Composition API kommer från förmågan att skapa återanvändbara komposterbara funktioner. En komposterbar funktion är helt enkelt en funktion som kapslar in en bit komponentlogik och returnerar reaktivt tillstånd och funktioner som kan användas i flera komponenter.

Exempel: Låt oss skapa en komposterbar funktion som spårar musens position:

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 kan du använda denna komposterbara funktion i vilken komponent som helst:

import { useMousePosition } from './useMousePosition'

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

    return {
      x,
      y
    }
  }
}

Praktiska exempel och användningsfall

Låt oss utforska några praktiska exempel på hur Composition API kan användas i verkliga scenarier:

1. Datahämtning

Att skapa en komposterbar funktion för att hämta data från ett API är ett vanligt användningsfall. Detta gör att du kan återanvända samma datahämtningslogik över flera 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 sedan använda denna komposterbara funktion i dina komponenter så här:

import { useFetch } from './useFetch'

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

    return {
      data,
      error,
      loading
    }
  }
}

2. Formulärvalidering

Formulärvalidering är ett annat område där Composition API kan vara mycket användbart. Du kan skapa komposterbara funktioner som kapslar in valideringslogik och återanvända dem i olika formulär.

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 = 'Detta fält är obligatoriskt'
        break
      } else if (rule === 'email' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
        error = 'Ogiltigt e-postformat'
        break
      }
    }

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

  return {
    errors,
    validateField
  }
}

Användning 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. Hantera användarautentisering

Autentiseringslogik kan ofta vara komplex och duplicerad över flera komponenter. Composition API låter dig skapa en komposterbar funktion som kapslar in all autentiseringslogik och tillhandahåller ett rent API för dina komponenter att använda.

Exempel: (Förenklat)

import { ref } from 'vue'

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

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

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

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Bästa praxis för att använda Composition API

För att få ut det mesta av Composition API, överväg följande bästa praxis:

Vanliga fallgropar och hur man undviker dem

Även om Composition API erbjuder många fördelar, finns det också några vanliga fallgropar att vara medveten om:

Composition API och globala team

Composition API främjar samarbete inom globala utvecklingsteam genom att främja:

Slutsats

Vue.js 3 Composition API är ett kraftfullt verktyg som avsevärt kan förbättra organisationen, återanvändbarheten och testbarheten i dina Vue-applikationer. Genom att förstå grundkoncepten och följa bästa praxis som beskrivs i denna djupdykning kan du utnyttja Composition API för att bygga mer underhållbara och skalbara applikationer för en global publik. Omfamna Composition API och lås upp den fulla potentialen i Vue.js 3.

Vi uppmuntrar dig att experimentera med Composition API i dina egna projekt och utforska de stora möjligheter det erbjuder. Lycka till med kodningen!