Vue에서의 반응형 컴포넌트 삭제
리스트에서 자식 컴포넌트를 반응적으로 삭제하는 방법을 배워봅시다.
이를 위해 각 자식 컴포넌트에 특별한 버튼을 만들겠습니다.
이 버튼을 클릭하면 이벤트가 발생하고 부모 컴포넌트에서 지정된
자식 컴포넌트가 id를 기준으로 삭제됩니다.
구현을 시작해 보겠습니다. 부모 컴포넌트에 다음과 같은 객체 배열이 있다고 가정해 보겠습니다:
data() {
return {
users: [
{
id: 1,
name: 'name1',
surn: 'surn1'
},
{
id: 2,
name: 'name2',
surn: 'surn2'
},
{
id: 3,
name: 'name3',
surn: 'surn3'
},
],
}
}
부모 컴포넌트에서 id를 기준으로 사용자를 삭제하는 메서드를 작성해 보겠습니다:
methods: {
remove(id) {
this.users = this.users.filter((user) => {
return user.id !== id;
})
}
}
루프를 사용하여 컴포넌트를 생성하고,
이름, 성, id 및 삭제 메서드를 매개변수로 전달하겠습니다:
<template>
<User
v-for ="user in users"
:id ="user.id"
:name ="user.name"
:surn ="user.surn"
@remove ="remove"
:key ="user.id"
/>
</template>
props 설정에서 입력 데이터를 정의하고,
emits 설정에서 발생시킬 이벤트를 정의하겠습니다:
props: {
id: Number,
name: String,
surn: String,
},
emits: ['remove'],
컴포넌트 템플릿에서 사용자의 이름과 성을 출력해 보겠습니다:
<template>
{{ name }}
{{ surn }}
</template>
이제 클릭 시 삭제 이벤트를 발생시키는 버튼을 만들어 보겠습니다.
이 이벤트의 매개변수로 컴포넌트의 id가 전달됩니다.
부모 컴포넌트는 이벤트를 수신하면 객체 배열에서 해당 사용자를 삭제하고,
사용자 목록에서 반응적으로 사라지게 됩니다.
자, 이 버튼을 구현해 보겠습니다:
<template>
{{ name }}
{{ surn }}
<button @click="$emit('remove', id)">
remove
</button>
</template>
루프를 사용하여 Employee 컴포넌트를 출력하세요.
각 컴포넌트에 삭제 버튼을 만드세요.