배열에 항목제거 및 수정

작업
map()
진행 상태
완료
진행일시
2021/11/27
학습자

App.js

import React, {useRef, useState}from 'react'; // import React from 'react'; import './App.css' // import InputSample2 from './InputSample2'; import UserList from './UserList'; import CreateUser from './CreateUser'; // []의 의미는 key값으로 쓰겠다는 의미입니다. // [name] 이 username과 email 두가지의 경우가 있는데, // onChange라는 하나의 함수로 여러값을 저장하기 위해서 사용한것으로 보여집니다. // [e.target.name] : e.target.value 이런식으로 state에 저장을하면 input마다 // 다른 함수를 사용하지 않고 여러개 input값을 저장할 수 있습니다. // username:e.target.value, email: e.target.value // 이렇게 dynamic하게 key값이 들어갑니다^^ function App() { const [Inputs, setInputs] = useState({ username : '', email : '', id : '' }); const {username, email, id} = Inputs; const onChange = (e) => { const {name, value} = e.target; setInputs({ ...Inputs, [name] : value }) } const [users,setUsers] = useState([ { id : 1, username : 'velopert', email : 'public.velopert@gmail.com', active : true }, { id : 2, username : 'tester', email : 'tester@example.com', active : false }, { id : 3, username : 'liz', email : 'liz@example.com', active : false }, ]); //다음값 id지정 const nextId = useRef(4); //새롭게 등록할 때 const onCreate = () => { const user = { id : nextId.current, username : username, email : email }; setUsers([...users, user]); setInputs({ username : '', email : '' }) nextId.current += 1; } //삭제하기위해서는 각 id를 알아야한다 const onRemove = id => { //user.id가 파라미터로 일치하지 않는 원소만 추출해서 새로운 배열을 만듬 // 즉 user.id 가 id인것만 제거하고 그 외에는 새로배열을 생성 setUsers(users.filter(user => user.id !== id)); } //수정 const onToggle = id => { setUsers( users.map(user => user.id === id ? {...user, active : !user.active} : user) ) }; //업데이트 const onUpdate = () => { setUsers ( users.map(user => user.id === id ? {...user, username: username, email : email} : user) ); setInputs({ username : '', email : '', id : '' }) } const onModify = (user) => { setInputs({ username : user.username, email : user.email, id : user.id }) } return ( <> <CreateUser username = {username} email = {email} onChange = {onChange} onCreate = {onCreate} onUpdate = {onUpdate} /> <UserList users={users} onRemove={onRemove} onToggle={onToggle} onModify={onModify}/> </> ); // return ( // <InputSample2 /> // ) } export default App;
JavaScript
복사

UserList.js

import React from 'react'; function User({user, onRemove, onToggle, onModify}) { return ( <div> <b style={{ cursor: 'pointer', color : user.active ? 'green' : 'black' }} onClick={() => onToggle(user.id)}>{user.username}</b><span>({user.email})</span> <button onClick={() => onRemove(user.id)}>삭제</button> <button onClick={() => onModify(user)}>수정</button> </div> ); } function UserList({users, onRemove, onToggle, onModify}) { return ( <div> { users.map(user => ( <User user={user} key={user.id} onRemove={onRemove} onToggle={onToggle} onModify={onModify}/> ))} </div> ) } export default UserList;
JavaScript
복사

CreateUser.js

import React from 'react'; function CreateUser({username, email, onChange, onCreate, onUpdate}) { return( <div> <input name="username" placeholder="계정명" onChange={onChange} value={username} /> <input name="email" placeholder="이메일" onChange={onChange} value={email} /> <button onClick={onCreate}>등록</button> <button onClick={onUpdate}>업데이트</button> </div> ) } export default CreateUser;
JavaScript
복사