본문 바로가기
Language/React

[React] 배열에 항목 제거하기

by 며루치꽃 2020. 12. 28.
import React from 'react';
function User({ user, onRemove }){ // User 컴포넌트는 onRemove를 그대로 받아와야 합니다.
const { username, email, id} = user;
return(
<div>
<b>{username}</b> <span>{email}</span>
<button onClick={() => onRemove(id)}>삭제</button> {/* 버튼이 눌렸을 경우에 이러한 함수를 호출할 것이다. 이 함수에는 props로 받아온 onRemove를 id값을 받아서 파라미터로 호출해줄 것이다*/}
</div>
)
}
function UserList({ users, onRemove }){
return(
<div>
{
users.map(
user => (
<User
user={user}
key={user.id}
onRemove={onRemove}/>)
)
}
</div>
);
}
export default UserList;

기존 UserList에 onRemove props를 받아와서 onRemove라는 props를 User 컴포넌트에게 전달해줄 것입니다. 

User 컴포넌트는 onRemove를 그대로 받아와야 합니다.

 

import React, { useRef, useState } from 'react';
import UserList from './UserList'
import CreateUser from './CreateUser';
function App() {
const onCreate = () => {
const user = { // 새로운 객체를 만들어주고
id: nextId.current,
username,
email,
};
// setUsers(users.concat(user)); // 새로운 배열을 만들어서 괄호 안에 있는 user를 붙여줍니다.
setUsers([...users, user]); // 기존의 배열을 복사해서 넣은다음에 새로운 배열을 만들고 뒤에다가 user를 넣어주면 새로운 배열이 만들어집니다
setInputs({ // 버튼이 눌렸을 때 초기화되도록
username:'',
email: ''
});
console.log(nextId.current); //4;
nextId.current += 1;
};
const onRemove = id => { // filter 함수를 사용하여 특정 조건이 만족할 떄 새로운 배열을 만들어줍니다
setUsers(users.filter(user => user.id !== id ));
};
return(
<>
<CreateUser
username={username}
email={email}
onChange={onChange}
onCreate={onCreate} />
<UserList users={users} onRemove={onRemove} />
</>
)
}
export default App

삭제 버튼이 눌렸을 때, onRemove() 가 호출되게 할 것인데, onRemove에 id 값을 넣어서 호출을 해주고 싶을 경우 파라미터를 넣어주고 싶기 때문에 새로운 함수를 만들어줍니다. 

 

배열에서 제거하기 - filter

배열에서 특정 아이템을 삭제할 때에는 불변성을 지켜가면서 업데이트를 해줘야합니다. 

이 때 filter라는 함수를 사용하면 편합니다. 이 함수는 배열에서 특정 조건이 만족하는 원소들을 추출해서 새로운 배열을 만들어줍니다. 

 

onRemove는 id 값을 가져와서 user.id가 파라미터로 가져온 것이랑 일치하지 않는 것을 추출해주겠다.

setUsers 해서 users.filter() 를 해서 각 아이템들을 비교하는데 파라미터로 받아온 id랑 비교를 합니다. 

filter가 만족한다면 새로운 배열에 넣고 , 만족하지 않을 경우 새로운 배열에 넣지 않습니다.

댓글