React
[ React ] TodoList 1️⃣ 기본
Mungwang
2023. 9. 7. 14:06
💎 TodoList
- useState : 리액트에서 가장많이쓰는 상태 함수형 컴포넌트에서도 상태를 관리할 수 있게 되었습니다. 이번에는 useState 라는 함수를 사용해보게 되는데
- const newTodos [ ...todos,newTodo ] : 전개구문을 사용하여 todos 2개객체와 newTodo에 입력되어 생성되는객체를 합쳐준다.
전개변수(참고)--> https://mungwang.tistory.com/entry/React-1
import React, { useState } from 'react';
// useState 복습
const InputName = () => {
// state : 컴포넌트의 상태
// useState : 컴포넌트의 상태를 관리
// -> state 변화가 감지되면 컴포넌트를 리렌더링
const [name, setName] = useState('');
// name: 변수명
// setName : name 변수의 setter
// useState : name 변수에 대입되는 초기값을 ''(빈칸)으로 지정
return(
<div>
<p>이름을 입력하세요</p>
<input type='text' onChange={ e=> setName(e.target.value)}/>
<h3>{name}</h3>
</div>
);
};
const TodoList1 = () => {
// 할 일을 저장할 변수
// -> 상태가 변하면 컴포넌트 (TodoList1)을 리렌더링
const [todos, setTodos] = useState([
{text : '프로젝트', completed : false},
{text : '점심 먹기', completed : false}
]);
console.log(todos);
// 할 일 입력 컴포넌트
const InputTodo = () => {
const [inputText, setInputText] = useState('');
// 버튼 클릭 시 할일 추가
const addTodo = () => {
const newTodo = {text : inputText, completed : false};
// todos에 newTodo를 추가한 새로운 객체배열 newTodos
const newTodos = [...todos, newTodo];
// 새로운 객체배열 newTodos를 todos에 대입
// -> 상태 변화 인식 -> 리렌더링 진행
setTodos(newTodos);
setInputText('') // 입력된 할 일 삭제
};
const NewTodoList = (todos) =>{
let arr = [];
for (let i=0; i<todos.length; i++){
arr.push(
<h4>{todos[i].text}</h4>
)
}
return arr;
}
return(
<div>
<h4>할 일 추가</h4>
<input type='text' onChange={e=> setInputText(e.target.value)}/>
<button onClick={addTodo}>추가하기</button>
<h3>{NewTodoList(todos)}</h3>
</div>
)
};
return(
<>
<hr/>
<InputName/>
<hr/>
<h1>Todo List1</h1>
{/* 입력 */}
<InputTodo/>
</>
);
};
export default TodoList1;