Front/React.js

[React] 사용자 정보 입력 받기 (Forms)

ddo04 2024. 8. 15. 01:43
[React] 사용자 정보 입력 받기

사용자 입력 코드

  • signup 컴포넌트는 이름을 입력할 수 있는 input 태그와 입력된 값을 저장하기 위한 name이라는 state를 가지고 있음

  • select 태그에는 총 두가지 옵션이 들어가 있는데 select 태그의 값이 변경되면 처리하기 위해 handleChangeGender라는 이벤트 핸들러를 만들어서 사용

 

📲 Form

  • 사용자가 무언가를 선택을 해야 하는 것
  • 사용자로부터 입력을 받기 위해 사용
// HTML Form

<form>
	<label>
    	이름:
        <input type="text" name="name"/>
    </label>
    <button type="submit">제출</button>
</form>
  • 리액트에서도 잘 작동하지만 자바스크립트 코드를 통해 사용자가 입력한 갑에 접근하기에는 불편한 구조
  • 자바스크립트 코드에서 사용자가 입력한 값에 접근하고 제어할 수 있어야 웹페이지를 개발할 때 더 편리

📲 Controlled Components

  • 사용자가 입력한 값에 접근하고 제어할 수 있도록 해주는 컴포넌트
  • 값이 React의 통제를 받는 Input Form Element 의미
  • 리액트에서 모든 값을 통제할 수 있는 구조를 가지고 있음
  • 입력 값이 React 컴포넌트의 state를 통해 관리
  • 여러 개의 입력 양식의 값을 원하는 대로 조정할 수 있다는 말
  • 입력 양식의 초기 값을 내가 원하는 대로 넣어줄 수 있으며 다른 양식의 값이 변경되었을 때 또 다른 양식의 값도 자동으로 변경시킬 수 있음

📲  Textarea 태그

  • 여러 줄에 걸쳐 긴 텍스트를 입력받기 위한 HTML 태그
  • HTML에서는 코드와 같이 텍스트를 태그가 감싸는 형태로 사용
<textarea>
	안녕하세요, 여기에 이렇게 텍스트가 들어가게 됩니다.
</textarea>
  • React에서는 textarea 태그에 value라는 attribute를 사용하여 택스트 표시

📲  Select 태그

  • Drop-down 목록을 보여주기 위한 HTML 태그
  • 드롭다운 목록은 여러가지 옵션 중에서 하나를 선택할 수 있는 기능을 제공
  • HTML에서는 코드와 같이 옵션 태그를 select 태그가 감싸는 형태로 사용
<select>
	<option value="apple">사과</option>
    <option value="banana">바나나</option>
    <option selected value="grape">포도</option>
    <option value="watermelon">수박</option>
</select>
  • 옵션 태그에서 현재 선택된 옵션의 경우 selected을 가지고 있음
  • React에서는 옵션 태그에 Selected 속성을 사용하지 않고 대신에 Select 태그에 value라는 어트리뷰트를 사용해서 값을 표시
  • multiple 이라는 속성을 사용하면 여러 개의 옵션을 선택할 수 있음
  • 사용자 입력을 받는 컴포넌트를 만들 때 사용함

📲  File input태그

  • 디바이스의 저장 장치로부터 하나 또는 여러 개의 파일을 선택할 수 있게 해주는 HTML 태그
  • 서버로 파일을 업로드하거나 자바스크립트의 File API를 사용해서 파일을 다룰 때 사용
<input type="file" />
  • 값이 읽기 전용이기 때문에 React에서는 uncontrolled 컴포넌트가 됨
  • 값이 React의 통제를 받지 않음

📲  Multiple Inputs

  • 여러 개의 state를 선언하여 각각의 입력에 대해 사용
  • 클래스 컴포넌트에서는 setState 함수 하나로 모든 state의 값을 업데이트 했지만 함수 컴포넌트에서는 각 state의 변수마다 set 함수가 따로 존재하기 때문에 각각의 set 함수를 사용해서 구현
  • 제어 컴포넌트에 value prop을 정해진 값으로 넣으면 코드를 수정하지 않는 한 입력 값을 바꿀 수 없음
  • value prop은 넣되 자유롭게 입력할 수 있게 만들고 싶다면 값에 undefined 또는 null을 넣어주면 됨