Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SpringRESTDocs
- Reduxpender
- stopPropogation
- Spring Batch
- tasklet
- preventdefault
- JavaScript
- Filter
- REACT
- UsernamePasswordAuthenticationFilter
- cloud native
- MSA
- openapi3
- Spring Security
- SpringBoot
- T-OTP
- Pender
- 리액트
- axios
- gradle
- Flyway
- SWAGGER
- AuthenticatoinProvide
- vue
- vuejs
- MFA
- OpenStack
- Spring REST Docs
- Crawling
- cheerio
Archives
- Today
- Total
Miracle Morning, LHWN
11. 배열에 원소를 추가하는 두 가지 방법 본문
이번에는 부모 컴포넌트 App에서 상태관리를 하고, <input>의 값 및 이벤트 함수를 props로 넘겨받아서 사용해본다.
// 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;
// App.js
import React, { useRef } from 'react';
import UserList from './UserList';
import CreateUser from './CreateUser';
function App() {
const users = [
{
id: 1,
username: 'velopert',
email: 'public.velopert@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@example.com'
},
{
id: 3,
username: 'liz',
email: 'liz@example.com'
}
];
const nextId = useRef(4);
const onCreate = () => {
// 나중에 구현 할 배열에 항목 추가하는 로직
// ...
nextId.current += 1;
};
return (
<>
<CreateUser />
<UserList users={users} />
</>
);
}
export default App;
이제 App에서 CreateUser 컴포넌트에게 넘겨줄 props를 작성해보자.
// 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 = [
{
id: 1,
username: 'velopert',
email: 'public.velopert@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@example.com'
},
{
id: 3,
username: 'liz',
email: 'liz@example.com'
}
];
const nextId = useRef(4);
const onCreate = () => {
// 나중에 구현 할 배열에 항목 추가하는 로직
// ...
setInputs({
username: '',
email: ''
});
nextId.current += 1;
};
return (
<>
<CreateUser
username={username}
email={email}
onChange={onChange}
onCreate={onCreate}
/>
<UserList users={users} />
</>
);
}
export default App;
여기서 users도 useState 를 통해 상태관리를 해보자.
// 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: 'velopert',
email: 'public.velopert@gmail.com'
},
{
id: 2,
username: 'tester',
email: 'tester@example.com'
},
{
id: 3,
username: 'liz',
email: 'liz@example.com'
}
]);
const nextId = useRef(4);
const onCreate = () => {
// 나중에 구현 할 배열에 항목 추가하는 로직
// ...
setInputs({
username: '',
email: ''
});
nextId.current += 1;
};
return (
<>
<CreateUser
username={username}
email={email}
onChange={onChange}
onCreate={onCreate}
/>
<UserList users={users} />
</>
);
}
export default App;
# 배열을 변경할 때에는 객체와 마찬가지로 불변성을 지켜주어야 한다.
→ 따라서 배열의 push, splice, sort 등의 함수는 사용하면 안된다.
만약에 사용해야 한다면 기존의 배열을 한 번 복사하고 나서 사용해주어야 한다.
그렇다면 불변성을 지키면서 배열에 새 항목을 추가하는 방법은 무엇이 있을까.
첫 번째, spread 연산자를 사용한다.
const onCreate = () => {
const user = {
id: nextId.current,
username,
email
};
setUsers([...users, user]);
setInputs({
username: '',
email: ''
});
nextId.current += 1;
};
두 번째, concat 함수를 사용한다.
concat 함수는 기존의 배열을 수정하지 않고, 새로운 원소가 추가된 배열을 새로이 만들어준다.
const onCreate = () => {
const user = {
id: nextId.current,
username,
email
};
setUsers(users.concat(user));
setInputs({
username: '',
email: ''
});
nextId.current += 1;
};
'IT 기술 > [React] 기본' 카테고리의 다른 글
13. 배열 항목 수정해보기 (0) | 2021.05.25 |
---|---|
12. 배열에서 항목을 제거하는 방법 (0) | 2021.05.25 |
10. 컴포넌트에서 변수를 관리해주는 useRef (0) | 2021.05.24 |
9. 배열을 렌더링 해보기 (0) | 2021.05.24 |
8. 특정 DOM을 선택하고 싶을 때에는 useRef로 (0) | 2021.05.24 |
Comments