inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지

객체 업데이트 하기

input value props 를 설정하면 입력이 안되는 이유

127

Droid

작성한 질문수 8

0

export default function FormComponent() {
    return (
      <form onSubmit={handleSubmit}>
        <input name="first" type="text" value="첫번째" />
        <input name="second" type="text" value="두번째" />
        <button type="submit">Submit 버튼</button>
      </form>
    );
  }

위와 같이 input 에 value props 를 설정하면 왜 타이핑이 안되는지 이해가 잘 안됩니다. 순수 HTML 에서는 input 요소의 value 속성은 초기값이고 변화된 현재값은 DOM 의 value 프로퍼티를 통해 가져올 수 있다고 알고있는데 React 에서는 뭐가 달라지길래 value props 를 설정만 하더라도 input 에 입력값이 변화되지 않는 것인지 알고 싶어요!

react React-Context react-router tailwindcss react-query

답변 1

0

짐코딩

안녕하세요 🙂

질문의 핵심은 "왜 JSX에서 value 속성이 변경이 안되는지" 인데요 이를 설명하기 위해서는 HTML과 JSX의 차이를 말씀드릴게요~!

JSX와 HTML의 차이점

  • HTML에서는 <input>value는 초기값을 설정하는 속성(attribute)입니다. 이후 사용자의 입력에 따라 DOM 자체가 값을 관리합니다.

  • JSX에서는 value를 설정하면, React가 해당 값을 컴포넌트 상태(State)로 관리합니다. React가 DOM과 독립적으로 상태를 유지하려는 디자인 철학 때문에, JSX의 value 속성은 HTML의 단순 초기값과 다르게 작동합니다.

왜 입력이 안되는가?

React에서는 value 속성을 JSX에서 설정하면, 해당 값은 React의 렌더링 시점에 DOM에 전달된 후 고정됩니다.
사용자의 입력은 DOM 값만 변경하려 하지만, React는 상태를 통해 value를 DOM에 덮어씌우기 때문에 입력값이 변경되지 않습니다.

예시 코드에서:

<input name="first" type="text" value="첫번째" />

value="첫번째"는 React가 이 값을 항상 유지하도록 명령합니다. React는 이 value를 컴포넌트 상태나 props로 관리할 준비가 되어 있다고 가정합니다. onChange로 상태를 업데이트하지 않으면 입력값이 변경되지 않습니다.

어떻게 수정해야 하나?

React에서 입력값이 변경되도록 하려면 onChange 이벤트 핸들러를 통해 React 상태를 업데이트해야 합니다.

수정 가능한 <input>을 만들려면:

  1. React 상태를 정의 (useState).

  2. onChange 이벤트로 상태를 업데이트.

import { useState } from "react";

export default function FormComponent() {
  const [first, setFirst] = useState("첫번째");

  return (
    <form>
      <input
        name="first"
        type="text"
        value={first} // React 상태에 연결
        onChange={(e) => setFirst(e.target.value)} // 상태 업데이트
      />
    </form>
  );
}

감사합니다 🙂

오타?

0

28

1

뭐하나 여쭤봐도 될까요?

0

70

1

안녕하세요 질문이 있습니다.

0

55

2

질문 : 삭제 버튼 아규먼트 (id)

0

50

1

Tailwind 버전 확인

0

62

1

align-items 정렬

0

50

2

vite 명령어로 프로젝트를 만들었습니다. (vscode)

0

79

1

31. 객체 업데이트 하기 - 10:15 질문

1

55

2

강의교안, 내용 인용해서 블로그 글 작성

1

80

2

이미지가 출력되지 않아요

1

74

2

강의와 만들어진 코드가 달라요

0

76

3

AI와 CSS 라이브러리의 궁합

0

95

1

onClick 이벤트에 함수 넘길 때

0

64

1

린캔버스 기능 구현은 왜 못하나요.... 구현하고 싶습니다...

0

101

1

notes 없음 읽기 오류

0

72

1

Object.assign 문법

0

64

1

react-router 전혀 기능 안함

0

53

1

react-router-dom@6.25.1

0

47

1

React Router 최신 스펙

0

207

1

Immer 에서 filter, map 사용

0

54

1

vite 설치에 대해 질문있습니다.

0

76

2

라이브러리 버전 일치 이슈

0

76

1

"Enter 키 발생 시 항목 추가" 부분에서 공백이 포함되면 한 줄이 더 입력됩니다

0

49

2

TotalCounter을 작성할때

0

65

2