DEV Community

Stefany Repetcki
Stefany Repetcki

Posted on

Vue - Props e Contexto no setup()

Na Composition API, o setup() recebe dois argumentos: props e context.


đź§© 1. Recebendo Props no setup()

O primeiro argumento do setup() sĂŁo as props recebidas pelo componente.

export default { props: { titulo: String }, setup(props) { console.log(props.titulo) // Acessa a prop 'titulo' return {} } } 
Enter fullscreen mode Exit fullscreen mode

âś… As props sĂŁo reativas! Mas nĂŁo podem ser diretamente modificadas (sĂŁo somente leitura).


đź’ˇ Exemplo com props:

export default { props: { nome: String }, setup(props) { const saudacao = `Olá, ${props.nome}!` return { saudacao } } } 
Enter fullscreen mode Exit fullscreen mode

đź§© 2. Usando o Contexto

O segundo argumento é um objeto chamado context, que contém:

Propriedade Descrição
attrs Atributos passados ao componente que nĂŁo sĂŁo declarados como props como class ou id
slots Slots passados ao componente
emit Função para emitir eventos personalizados

🔍 Exemplo:

export default { props: ['nome'], setup(props, context) { console.log(context.attrs) // { id: 'meu-componente' } (se nĂŁo for uma prop) console.log(context.slots) // Acesso aos slots context.emit('clicado') // Emite evento return {} } } 
Enter fullscreen mode Exit fullscreen mode

📤 Emitindo eventos com emit

VocĂŞ pode emitir eventos personalizados usando context.emit.

export default { setup(props, { emit }) { const clicar = () => { emit('meu-evento') } return { clicar } } } 
Enter fullscreen mode Exit fullscreen mode

E no template:

<MeuComponente @meu-evento="fazerAlgo" /> 
Enter fullscreen mode Exit fullscreen mode

📝 Resumo Rápido

Item Forma de Acesso Observações
Props setup(props) Reativas e somente leitura
Atributos extras context.attrs NĂŁo declarados em props
Slots context.slots Acessa conteĂşdo dos slots
Emitir evento context.emit() Dispara eventos para o componente pai

📌 Dica: Você pode desestruturar o segundo argumento:

setup(props, { emit, attrs, slots })


-> Adicional

🔄 Uso combinado de attrs e slots

<template> <div :class="attrs.class"> <slot></slot> </div> </template> <script> export default { setup(props, { attrs }) { return { attrs } } } </script> 
Enter fullscreen mode Exit fullscreen mode
<MyComponent class="minha-classe"> <p>Conteúdo dinâmico aqui!</p> </MyComponent> 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)