React.JS) 5. 간단한 To Do List 만들기

송민경's avatar
Sep 23, 2024
React.JS) 5. 간단한 To Do List 만들기

1. input 태그 만들기

  • onChange로 이벤트 연결하여 값 받아오기
import { useState, useEffect } from "react"; function App() { const [toDo, setToDo] = useState(""); const onChange = (event) => setToDo(event.target.value); console.log(toDo); return ( <div> <input onChange={onChange} type="text" placeholder="Write your to do" /> </div> ); } export default App;
notion image
 

2. form 태그의 submit

import { useState, useEffect } from "react"; function App() { const [toDo, setToDo] = useState(""); const onChange = (event) => setToDo(event.target.value); console.log(toDo); return ( <div> <form> <input onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> </div> ); } export default App;
notion image
notion image
  • submit 막기
import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); console.log(toDo); }; return ( <div> <form onSubmit={onSubmit}> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> </div> ); } export default App;
notion image
  • input 태그가 비어있을때만 submit 막기
import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); if(toDo === "") { return; } setToDo(""); }; return ( <div> <form onSubmit={onSubmit}> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> </div> ); } export default App;
notion image
notion image
 

3. 배열 만들기

  • JS에서 배열에 추가할 때
toDos.push()
  • state를 직접 수정할 수 없음
    • 함수 이용하기
    • setToDos(currentArray => [toDo, ...currentArray]); // 새로운 배열로 만들기 setToDo(""); // 비어있는 값으로 셋팅
  • 비어있는 배열 생성
import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const [toDos, setToDos] = useState([]); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); if(toDo === "") { return; } setToDo(""); }; console.log(toDos); return ( <div> <form onSubmit={onSubmit}> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> </div> ); } export default App;
notion image
  • 새로운 배열에 받아오기
import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const [toDos, setToDos] = useState([]); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); if(toDo === "") { return; } setToDos(currentArray => [toDo, ...currentArray]); setToDo(""); }; console.log(toDos); return ( <div> <form onSubmit={onSubmit}> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> </div> ); } export default App;
notion image
 

4. To Dos의 갯수 나타내기

import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const [toDos, setToDos] = useState([]); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); if(toDo === "") { return; } setToDos(currentArray => [toDo, ...currentArray]); setToDo(""); }; console.log(toDos); return ( <div> <form onSubmit={onSubmit}> <h1>My To Dos ({toDos.length})</h1> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> </div> ); } export default App;
notion image
 

5. 동적으로 List 만들기

import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const [toDos, setToDos] = useState([]); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); if(toDo === "") { return; } setToDos(currentArray => [toDo, ...currentArray]); setToDo(""); }; console.log(toDos); return ( <div> <form onSubmit={onSubmit}> <h1>My To Dos ({toDos.length})</h1> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> <hr /> <ul> {toDos.map((item) => <li>{item}</li>)} </ul> </div> ); } export default App;
notion image
  • 리스트를 렌더링할 때 각 요소에 고유한 "key" prop을 지정해야 함
    • 고유한 키는 React가 어떤 항목이 변경되었는지, 추가되었는지 또는 제거되었는지를 식별
    • 키가 없으면 React가 리스트의 항목을 효율적으로 업데이트할 수 없어서 성능 저하가 발생
    • notion image
      import { useState } from "react"; function App() { const [toDo, setToDo] = useState(""); const [toDos, setToDos] = useState([]); const onChange = (event) => setToDo(event.target.value); const onSubmit = (event) => { event.preventDefault(); if(toDo === "") { return; } setToDos(currentArray => [toDo, ...currentArray]); setToDo(""); }; return ( <div> <form onSubmit={onSubmit}> <h1>My To Dos ({toDos.length})</h1> <input value={toDo} onChange={onChange} type="text" placeholder="Write your to do" /> <button>Add To Do</button> </form> <hr /> <ul> {toDos.map((item, index) => <li key={index}>{item}</li>)} </ul> </div> ); } export default App;
notion image
Share article

vosw1