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가 만족한다면 새로운 배열에 넣고 , 만족하지 않을 경우 새로운 배열에 넣지 않습니다.
'Language > React' 카테고리의 다른 글
[React] 커스텀 Hooks 만들기 (0) | 2020.12.28 |
---|---|
[React] 배열에 항목 추가하기 (0) | 2020.12.28 |
[React] 배열 렌더링하기 (0) | 2020.12.28 |
[React] 라이플 사이클 구현 하기 - skipping effect (0) | 2020.12.27 |
[React] 클래스에서 라이프 사이클 구현하기 (0) | 2020.12.26 |
댓글