배열에 변화를 줄 때에는 객체와 마찬가지로 불변성을 지켜주어야한다.
그렇기 때문에 배열의 push, splice, sort등의 함수를 사용하면 안된다.
만약에 사용해야 한다면 기존의 배열을 한번 복사하고 나서 사용해야한다.
불변성을 지키면서 배열에 새 항목을 추가하는 방법은 두가지가 있다.
1. spread 연산자 사용
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 = () => {
const user = {
id: nextId.current,
username,
email
};
setUsers([...users, user]);
setInputs({
username: '',
email: ''
});
nextId.current += 1;
};
return (
<>
<CreateUser
username={username}
email={email}
onChange={onChange}
onCreate={onCreate}
/>
<UserList users={users} />
</>
);
}
export default App;
2. concat 사용
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 = () => {
const user = {
id: nextId.current,
username,
email
};
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;
'Development > React.js' 카테고리의 다른 글
[React] 배열 항목 수정하기 (0) | 2022.01.04 |
---|---|
[React] 배열 항목 제거하기 (0) | 2022.01.04 |
[React] useRef로 컴포넌트 안의 변수 만들기 (0) | 2022.01.04 |
[React] 배열 렌더링 하기 (0) | 2022.01.04 |
[React] useRef로 특정 DOM 선택하기 (0) | 2022.01.04 |