ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ReactJS] Forms
    Programming/ReactJS 2022. 12. 1. 00:56

    Form

    텍스트 입력, 체크박스 등 사용자가 선택하는 모든 것을 의미한다. 즉 사용자로부터의 입력을 받기위해 사용한다.

    Controlled Components

    사용자가 입력한 값에 접근하고 제어할 수 있도록 하는 컴포넌트이다. 리액트의 통제를 받는 Input Form Element을 의미한다. 사용자의 이름을 입력받는 예제코드이다.

    function NameForm(props) {
        const [value, setValue] = useState('');
    
        const handleChange = (event) => {
            setValue(event.target.value);
            // setValue(event.target.value.toUpperCase());
            // 입력받은 값을 모두 대문자로 변경
           
        }
    
        const handleSubmit = (event) => {
            alert('입력한 이름 : ' + value);
            event.preventDefault(); 
        }
    
        return (
            <form onSubmit={handleSubmit}>
                <label>
                    이름 : 
                    <input type="text" value = {value} onChange = {handleChange} />
                </label>
                <button type = "submit">제출</button>
            </form>
        )
    }

    사용자의 입력을 직접적으로 제어할 수 있다는 특징을 가지고 있다.

    Textarea 태그

    여러 줄에 걸쳐 킨 텍스트를 입력받기 위한 HTML 태그이다. 리액트에서는 다음과 같이 쓰인다.

    import { useState } from "react";
    
    function RequestForm(props) {
        const [value, setValue] = useState('요청사항을 입력하세요.');
    
        const handleChange = (event) => {
            setValue(event.target.value);
        }
    
        const handleSubmit = (event) => {
            alert('입력한 요청사항 : ' + value);
            event.preventDefault();
        }
    
        return (
            <form onSubmit={handleSubmit}>
                <label>
                    요청사항 : 
                    <textarea value = {value} onChange = {handleChange} />
                </label>
                <button type = "submit">제출</button>
            </form>
        )
    }

    Select 태그

    Drop-down 목록을 보여주기 위한 HTML 태그이다. 여러 목록들 중 하나를 선택할 수 있는 형태로 존재한다.

    function FruitSelect(props) {
        const [value, setValue] = useState('grape');
    
        const handleChange = (event) => {
            setValue(event.target.value);
        }
    
        const handleSubmit = (event) => {
            alert('선택한 과일 : ' + value);
            event.preventDefault();
        }
    
        return (
            <form onSubmit={handleSubmit}>
                <label>
                    과일을 선택하세요 : 
                    <select value={value} onChange={handleChange}>
                        <option value="apple">사과</option>
                        <option value="banana">바나나</option>
                        <option value="grape">포도</option>
                        <option value="watermelon">수박</option>
                    </select>
                </label>
                <button type="submit">제출</button>
            </form>
        )
    }

    File Input 태그

    디바이스의 저장 장치로부터 하나 또는 여러 개의 파일을 선택할 수 있게 해주는 HTML 태그이다.

    <input type = "file" />

    값이 읽기 전용이기 때문에 Uncontrolled Component에 해당된다.

    Multiple Inputs 예제

    import React, {useState} from "react";
    
    function Reservation(props) {
        const [haveBreakfast, setHaveBreakfast] = useState(true);
        const [numberOfGuest, setNumberOfGuest] = useState(2);
    
        const handleSubmit = (event) => {
            alert(`아침식사 여부 : ${haveBreakfast}, 방문객 수 : ${numberOfGuest}`);
            event.preventDefault()
        }
    
        return (
            <form onSubmit = {handleSubmit}>
                <label>
                    아침식사 여부 : 
                    <input
                        type = "checkbox"
                        checked = {haveBreakfast}
                        onChange = {(event) => {
                            setHaveBreakfast(event.target.checked);
                        }} />
                </label>
                <br />
                <label>
                    방문객 수 : 
                    <input
                        type = "number"
                        value = {numberOfGuest}
                        onChange = {(event) => {
                            setNumberOfGuest(event.target.value);
                        }} />
                </label>
                <button type = "submit">제출</button>
            </form>
        )
    }
    
    export default Reservation;

    input value의 값을 특정값으로 고정해뒀다가 시간이 지난 후 null로 설정하는 방식으로 특정 시점 이후에 사용자의 입력을 받을 수 있도록 기능을 구현하는 것 또한 가능하다.


    < Source />

    SignUp.jsx

    import React, { useState } from "react";
    
    function SignUp(props) {
        const [name, setName] = useState("");
    
        const handleChangeName = (event) => {
            setName(event.target.value)
        }
    
        const handleSubmit = (event) => {
            alert(`이름 : ${name}`);
            event.preventDefault();
        }
    
        return (
            <form onSubmit={handleSubmit}>
                <label>
                    이름 : 
                    <input type = "text" value = {name} onChange = {handleChangeName}/>
                </label>
                <button type = "submit">제출</button>
            </form>
        )
    }
    
    export default SignUp;

    ※ 본 게시글은 소플님의 강의 영상을 참고하여 작성되었습니다. 개인적인 공부 목적으로 사용하고 있고, 문제 시 비공개 전환하도록 하겠습니다.

    'Programming > ReactJS' 카테고리의 다른 글

    [ReactJS] Composition vs Inheritance  (0) 2022.12.01
    [ReactJS] Lifting State Up  (0) 2022.12.01
    [ReactJS] List and Keys  (0) 2022.11.30
    [ReactJS] Conditional Rendering  (0) 2022.11.30
    [ReactJS] Handling Events  (0) 2022.11.30

    댓글