DEV/react
React 시작하기 9. Array 항목 추가
석봉
2024. 1. 5. 10:52
App.js
import React, { useRef, useState } from 'react';
import UserList from './UserList';
import CreateUser from './CreateUser'
function App() {
const [inputs, setInputs] = useState({
username: '',
email: ''
});
const { username, email } = inputs;
const onChange = (e) => {
const { name, value } = e.target;
setInputs({
...inputs,
[name]: value
});
};
const [users, setUsers] = useState([
{
id: 1,
username: 'UserA',
email: 'usera@gmail.com'
},
{
id: 2,
username: 'UserB',
email: 'userb@gmail.com'
},
{
id: 3,
username: 'UserC',
email: 'userc@naver.com'
}
]);
// useRef로 만들어진 객체는 React가 만든 전역 저장소에 저장되기 때문에 함수를 재 호출하더라도 마지막으로 업데이트한 current 값이 유지됨
const nextId = useRef(4);
const onCreate = () => {
const user = {
id: nextId.current,
username,
email
};
// 2가지 방법이 존재
// setUsers([...users, user]);
setUsers(users.concat(user));
setInputs({
username: '',
email: ''
})
nextId.current += 1;
}
return (
<>
<CreateUser
username={username}
email={email}
onChange={onChange}
onCreate={onCreate}
/>
<UserList users={users} />
</>
);
}
export default App;
UserList.js
import React from "react";
function User({ user }) {
return (
<div>
<b>{user.username}</b> <span>({user.email})</span>
</div>
)
}
function UserList({ users }) {
return (
<div>
{ users.map((user) => ( <User user={user} key={user.id} /> )) }
</div>
);
}
export default UserList;
CreateUser.js
import React from "react";
function CreateUser({ username, email, onChange, onCreate }) {
return (
<div>
<input
name="username"
placeholder="계정명"
onChange={onChange}
value={username}
/>
<input
name="email"
placeholder="이메일"
onChange={onChange}
value={email}
/>
<button onClick={onCreate}>등록</button>
</div>
);
}
export default CreateUser;