jineecode
concat 활용하기 본문
Array.prototype.concat()
concat() 메서드는 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환합니다.
이를 이용하여 setState에 새로운 배열을 넣어 불변성을 유지합니다.
import React, { useState, useRef, useCallback } from "react";
import "./App.css";
import TodoTemplate from "./components/TodoTemplate";
import TodoInsert from "./components/TodoInsert";
import TodoList from "./components/TodoList";
function App() {
const [todos, setTodos] = useState([
{
id: 1,
text: "리액트의 기초 알아보기",
checked: true,
},
{
id: 2,
text: "컴포넌트 스타일링해 보기",
checked: true,
},
{
id: 3,
text: "일정 관리 앱 만들어 보기",
checked: false,
},
]);
const nextId = useRef(4);
const onInsert = useCallback(
(text) => {
const todo = {
id: nextId.current,
text,
checked: false,
};
setTodos(todos.concat(todo));
nextId.current += 1;
},
[todos]
);
return (
<TodoTemplate>
<TodoInsert onInsert={onInsert}/>
<TodoList todos={todos} />
</TodoTemplate>
);
}
export default App;
onInsert로 콜백이 실행되면,
todo에 객체 만들고,
setTodos(todos.concat(todo));
하면 불변성이 유지된다.
더불어,
nextId.current += 1
을 처리해서 Ref을 따로 준다.
import React, { useState, useCallback } from "react";
const TodoInsert = ({ onInsert }) => {
const [value, setValue] = useState("");
const onChange = useCallback((e) => {
setValue(e.target.value);
}, []);
const onSubmit = useCallback((e) => {
onInsert(value);
setValue("");
e.preventDefault();
});
return (
<form onSubmit={onSubmit}>
<input
placeholder="할일을 입력하세요"
value={value}
onChange={onChange}
/>
<button type="submit">제출</button>
</form>
);
};
export default TodoInsert;
'JS > react' 카테고리의 다른 글
Next.js 세팅 (0) | 2021.11.19 |
---|---|
next 위에서 i18next 적용하기 (1) | 2021.11.17 |
react 위에서 i18next 적용하기 (0) | 2021.09.01 |
SPA 환경에서 구글 태그 관리자 넣기 (0) | 2021.09.01 |
React Native 기본 원리 (0) | 2021.06.19 |
Comments