반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

간단한 일기장 프로젝트-State로 사용자 입력처리, useRef 본문

인프런, 유데미/한입 크기로 잘라 먹는 리액트

간단한 일기장 프로젝트-State로 사용자 입력처리, useRef

5_hyun 2022. 5. 23. 21:33
반응형
import { useRef, useState } from "react";

const DiaryEditor = () => {
  const authorInput = useRef();
  const contentInput = useRef();

  const [state, setState] = useState({
    author: "",
    content: "",
    emotion: 1,
  });

  const handleChangeState = (e) => {
    setState({
      ...state,
      [e.target.name]: e.target.value,
    });
  };

  const handleSubmit = () => {
    if (state.author.length < 1) {
      authorInput.current.focus();
      return;
    }

    if (state.content.length < 5) {
      contentInput.current.focus();
      return;
    }

    alert("저장 성공!");
  };

  return (
    <div className="DiaryEditor">
      <h2>오늘의 일기</h2>
      <div>
        <input
          ref={authorInput}
          name="author"
          value={state.author}
          onChange={handleChangeState}
        />
      </div>
      <div>
        <textarea
          ref={contentInput}
          name="content"
          value={state.content}
          onChange={handleChangeState}
        />
      </div>
      <div>
        <select
          name="emotion"
          value={state.emotion}
          onChange={handleChangeState}
        >
          <option value={1}>1</option>
          <option value={2}>2</option>
          <option value={3}>3</option>
          <option value={4}>4</option>
          <option value={5}>5</option>
        </select>
      </div>
      <div>
        <button onClick={handleSubmit}>일기 저장하기</button>
      </div>
    </div>
  );
};
export default DiaryEditor;

state를 통해서 사용자가 input과 textarea에 입력한 것을 실시간으로 받아왔다.

그리고 ref를 이용하여 만약 글자 수를 못넘기면 그 칸에 focus를 두도록 구현했다. ref도 react에서 import해서 사용해야 한다.

 

state가 중요한 것을 깨달았고 아직 좀 더 익숙해질 필요가 있다고 생각했다.

 

-결과

반응형
Comments