Web Tech/react
react 기본 - 11.배열 항목 제거
걍가영
2021. 11. 23. 15:00
배열 항목 제거
불변성을 지키면서 특정 원소를 배열에서 제거하기 위해서 filter 배열 내장 함수를 사용하는 것이 편하며,
filter는 특정 조건이 만족하는 원소들만 추출하여 새로운 배열을 만들어줍니다.
UserList.js
import React from 'react';
const User = ({user, onRemove}) => {
return(
<>
<p><b>{user.username}</b> "{user.email}" <button onClick={() => onRemove(user.id)} type="button">삭제</button></p>
</>
)
}
const UserList = ({users, onRemove}) => {
return (
<>
{users.map(user => (
<User user={user} key={user.id} onRemove={onRemove}/>
))}
</>
)
}
export default UserList;
App.js
import React, {useRef, useState} from 'react';
import Inner from "./Inner";
import UserList from "./UserList";
import CreateUser from "./CreateUser";
function App() {
// 동적으로 처리
// 비구조 할당으로 inputs === 값, setInputs === 함수명
// 빈값 설정
const [inputs, setInputs] = useState({
usersname: '',
email: ''
});
// 비구조 할당으로 값 추출
const {username, email} = inputs;
// 체인지 이벤트
const onChange = e => {
// e.target 이름과 값 추출
const {name,value} = e.target;
// setInputs 중 inputs 복사
setInputs({
...inputs,
//name 키를 가진 값을 value로 설정
[name]: value
});
}
// users라는 값과 setUsers 함수로 동적으로 처리
const [users, setUsers] = useState ([
{
id: 1,
username: 'a',
email : 'aaa@gmail.com'
},
{
id: 2,
username: 'b',
email : 'bbb@gmail.com'
},
{
id: 3,
username: 'c',
email : 'ccc@gmail.com'
}
]);
// 초기값 4로 설정후 변수에 담기
const nextId = useRef(4);
const onCreate = () => {
const user = {
id: nextId.current,
username,
email
}
setUsers([...users, user]);
// setInputs 빈값 설정
setInputs({
username: '',
email: ''
});
nextId.current += 1;
}
const onRemove = id => {
// user.id가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열 만듬
// user.id가 id 인 것을 제거함
setUsers(users.filter(user => user.id !== id));
}
return (
<React.Fragment>
<Inner>
<CreateUser
username={username}
email={email}
onChange={onChange}
onCreate={onCreate}
/>
<UserList users={users} onRemove={onRemove}/>
</Inner>
</React.Fragment>
);
}
export default App;