Remoção Reativa de Componentes no Vue

Vamos aprender a remover componentes filhos de uma lista de forma reativa. Para fazer isso, vamos criar um botão específico em cada componente filho. Ao clicar neste botão, um evento será emitido e no componente pai o componente filho especificado será removido pelo seu id.

Vamos começar a implementação. Suponha que no componente pai exista o seguinte array de objetos:

App.vuedata() {
  return {
    users: [
      {
        id: 1,
        name: 'name1',
        surn: 'surn1'
      },
      {
        id: 2,
        name: 'name2',
        surn: 'surn2'
      },
      {
        id: 3,
        name: 'name3',
        surn: 'surn3'
      },
    ],
  }
}

Vamos escrever no componente pai um método para remover um usuário pelo seu id:

App.vuemethods: {
  remove(id) {
    this.users = this.users.filter((user) => {
      return user.id !== id;
    })
  }
}

Vamos criar os componentes em um loop, passando como parâmetro o nome, sobrenome, id e o método de remoção:

App.vue<template>
  <User
    v-for   ="user in users"
    
    :id     ="user.id"
    :name   ="user.name"
    :surn   ="user.surn"
    @remove ="remove"
    :key    ="user.id"
  />
</template>

Vamos definir os dados de entrada na configuração props e o evento emitido na configuração emits:

components/User.vueprops: {
  id:     Number,
  name:   String,
  surn:   String,
},
emits: ['remove'],

Vamos exibir no template do componente o nome e sobrenome do usuário:

components/User.vue<template>
  {{ name }}
  {{ surn }}
</template>

Agora, vamos criar um botão que, ao ser clicado, emite um evento para remoção. O parâmetro deste evento será o id do componente. O componente pai, ao receber o evento, removerá este usuário do array de objetos e ele desaparecerá reativamente da lista de usuários.

Então, vamos implementar este botão:

components/User.vue<template>
  {{ name }}
  {{ surn }}
  
  <button @click="$emit('remove', id)">
    remover
  </button>
</template>
Задание 1

Exiba em um loop os componentes Employee. Crie em cada componente um botão para removê-lo.