Blog/React.js

[일기장 만들기_02] React에서 DOM 조작하기

용디 2022. 2. 15. 22:24

목표

- 저장 버튼 클릭시 입력내용이 조건에 만족하는지 확인

- 조건 미 만족시 해당 input focus 처리


Ref를 사용해야 할 때

- 포커스, 텍스트 선택영역, 혹은 미디어의 재생을 관리할 때.

- 애니메이션을 직접적으로 실행시킬 때.

- 서드 파티 DOM 라이브러리를 React와 같이 사용할 때.


최종코드

import React, { useRef,useState } from "react"; // 💡 DOM 선택하는 함수를 최상단에 추가 선언 

const DiaryEditor = () => {

  const authorInput = useRef(); // 💡 특정 DOM 선택시 사용
  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(); // 👉 해당 input에 포커스를 하기위해 current.focus(); 추가
      return false;
    }

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

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

  return (
    <div className="DiaryEditor">
      <h2>오늘의 일기</h2>
      <div>
        <input
          ref={authorInput} // 👉 ref
          value={state.author}
          onChange={handleChangeState}
          name="author"
          placeholder="제목"
          type="text"
        />
      </div>
      <div>
        <textarea
          ref={contentInput}
          value={state.content}
          onChange={handleChangeState}
          name="content"
          placeholder="일기"
          type="text"
        />
      </div>
      ~~~~~
    </div>
  );
};

export default DiaryEditor;

 


Demo : winterlood - codeSandbox

useRef 참고 : https://react.vlpt.us/basic/10-useRef.html