Skip to content

Vue 3: Componenti Avanzati

I componenti sono i mattoni fondamentali delle applicazioni Vue. Imparare a comunicarli tra loro è essenziale.

Props e validazione

vue
<script setup>
const props = defineProps({
  title: {
    type: String,
    required: true
  },
  status: {
    type: String,
    validator: (value) => ['success', 'warning', 'error'].includes(value)
  },
  count: {
    type: Number,
    default: 0
  }
})
</script>

Emit events

vue
<script setup>
const emit = defineEmits({
  update: (payload) => {
    if (payload.id && payload.value) {
      return true
    }
    console.warn('Invalid update payload')
    return false
  }
})

const handleUpdate = () => {
  emit('update', { id: 1, value: 'new value' })
}
</script>

Provide / Inject

Per comunicazione tra componenti annidati:

vue
<!-- Parent.vue -->
<script setup>
import { provide } from 'vue'

provide('theme', {
  dark: true,
  colors: { primary: '#3498db' }
})
</script>

<!-- Child.vue -->
<script setup>
import { inject } from 'vue'

const theme = inject('theme')
</script>

Slots avanzati

vue
<!-- Modal.vue -->
<template>
  <div class="modal">
    <header>
      <slot name="header">Default Header</slot>
    </header>
    <main>
      <slot></slot>
    </main>
    <footer>
      <slot name="footer"></slot>
    </footer>
  </div>
</template>

Conclusione

I componenti Vue sono potenti e flessibili. Padroneggiare props, emits e slots è fondamentale per costruire applicazioni scalabili.

Made with ❤️ by PeterDev
'Ho mio cuGGGino che lo sa fare' cit.