connecting dots

Beginner 8회차 2 (8/6) | 양방향 데이터 바인딩과 단방향 데이터 바인딩 예제로 이해하기, Todo 항목 추가하기 실습 본문

Live Class/Beginner

Beginner 8회차 2 (8/6) | 양방향 데이터 바인딩과 단방향 데이터 바인딩 예제로 이해하기, Todo 항목 추가하기 실습

dearsuhyun 2024. 8. 6. 18:50

양방향 데이터 바인딩과 단방향 데이터 바인딩 예제로 이해하기

Q.
강사님! title={title}와 같은 반응형 데이터는 부모에서 자식 컴포넌트로 속성을 전달할 때 쓰는 단방향 데이터 전달이고
저희가 방금 배운 value={title}처럼 쓰는 건 폼 요소에서 요소의 상태를 제어할 때 사용하는 양방향 데이터 전달이라고 이해했는데 맞을까요?

A. 


 

 

Todo 항목 추가 기능 구현하기

App.tsx

// App.tsx
// todo목록 새로 가지고 오는 함수 내려줌

import TodoCreator from './components/TodoCreator'

<TodoCreator getTodos={getTodos} />

 

todoCreator.tsx

 

 

엔터키 눌렀을 때 새 목록을 가지고 오도록 하는 함수(createTodo) 실행 !

 

 

body에 꼭 들어가야 하는 것이 있는지 API 명세서 확인

--> title 필수 !

API 명세서. title 필수로 넣어줘야 함

 

보낸 데이터와 응답받은 데이터 확인해보기 



 
payload: 전송한 데이터를 볼 수 있음




preview: 서버가 준 데이터(응답받은 데이터)를 볼 수 있음 



 

 

디스플레이로 구현되는 부분. onKeyDown일 때 함수를 넣어주기

 

기능 구현 완료

enter 눌렀을 때 추가됨

 

전체 코드

// App.tsx
// todo목록 새로 가지고 오는 함수 내려줌

import TodoCreator from './components/TodoCreator'

<TodoCreator getTodos={getTodos} />

// Todocreator.tsx
import { useState } from 'react'

export default function TodoCreator({ getTodos }: { getTodos: () => void }) {
  const [title, setTitle] = useState('')

  function onKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {
    if (event.key === 'Enter') {
      console.log('title:', title)
      createTodo()
    }
  }

  async function createTodo() {
    await fetch(
      `https://asia-northeast3-heropy-api.cloudfunctions.net/api/todos`, // todos/도 가능
      {
        method: 'POST', // 생성
        headers: {
          'content-type': 'application/json',
          apikey: 'KDT9_AHMq2s7n',
          username: 'FE1_ParkSuHyun'
        },
        body: JSON.stringify({
          title // title: title
        })
      }
    )
    getTodos()

  }

  return (
    <div>
      <input
        value={title}
        onChange={e => setTitle(e.target.value)}
        onKeyDown={onKeyDown}
        placeholder="새로운 할 일을 작성하세요"
      />
    </div>
  )
}
반응형