React/개념

To Do List (react기초)

하로이 2022. 10. 6. 15:53

Todo list 만드는 게 기초라니 참.. 당황스럽고 어이없죠?

저도 그래요 이해 하는데 시간이 굉장히 걸리네요 :(

 

이제 제가 이해한걸 여러분에게 말씀드려볼게요

일단 전체 코드는 이것이고 밑에 설명 넣어두겠습니다.

import React, { useState } from "react";

function TodoList() {
  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>
      <h1>My To Dos({toDos.length})</h1>
      <form onSubmit={onSubmit}>
        <input
          onChange={onChange}
          value={toDo}
          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 TodoList;
 
function TodoList() {
  const [toDo, setToDo] = useState("");
  const [toDos, setToDos] = useState([]);
  const onChange = (event) => setToDo(event.target.value);
  const onSubmit = (event) => {
     event.preventDefault();}
  return (
    <div>
      <h1>My To Dos({toDos.length})</h1>
      <form onSubmit={onSubmit}>
        <input
          onChange={onChange}
          value={toDo}
          type="Text"

먼저 useState로 빈 문자열이랑 배열을 설정해줍니다.

다음 return 아래로 넘어가면 이제 JSX 라인이라는 거 아시죠?

 

자바스크립트에서 JSX로 값을 가져오기 때문에 일단 중괄호{}를 넣었고, onSubmit이라는 이벤트를 주는 이유는 이런 제출 이벤트를 하지 않는다면 버튼을 눌렀을 때 자동으로 새로고침이 발생하기 때문에 onSubmit이벤트로 그런 현상을 방지한 것입니다.

 

다음으로 onChange 이벤트인데요 이건 내가 작성하는 문서를 그대로 웹에서 받아들여질 수 있도록 만들어진 이벤트입니다.

그래서 input 안 value에다가 내가 내가 onChange로 실행할 초깃값(toDos)을 넣어주고 onChange 함수 이벤트 라인에는 변경 가능한 set ToDo로 (event.target.value)를 찍어주면 작성하는 값이 찍히게 됩니다.

 

  const onSubmit = (event) => {
    event.preventDefault();
    if (toDo === "") {
      return;
    }
    setToDos((currentArray) => [toDo, ...currentArray]);
    setToDo("");
  };

자~ 마지막 설명입니다.

if 만약에 전송 이벤트 Submit을 진행했을 때 사용자가 아무것도 입력하지 않았다면 다시 리턴해서 todolisst작성이 되지 않도록 설정해 놓았고, SetTodos는 배일이기 때문에 currentArray(현재의 배열)에서 [todo,... currentArray]로 하면서 todo가 증가함에 다라서 toDos와 currentArray의 몸집은 커지겠죠?

 

그럼 오늘도 읽어주셔서 감사합니다!