관리 메뉴

사과하는 제라스

5장. ref: DOM에 이름 달기 본문

코테이토 동아리/[코테이토]React 스터디 5기

5장. ref: DOM에 이름 달기

Xerath(제라스) 2023. 1. 27. 11:51

목차

    728x90
    반응형

    ref는 언제 쓸까...!?

    -> DOM을 꼭 직접적으로 건드려야 할 때

     

    DOM을 꼭 사용해야 하는 상황

    1. 특정 input에 포커스에 주기

    2. 스크롤 박스 조작하기

    3. Canvas 요소에 그림 그리기

    등등...

    import React, { Component } from "react";
    import "./ValidationSample.css";
    
    class ValidationSample extends Component {
      state = {
        password: "",
        clicked: false,
        validated: false,
      };
    
      input = React.createRef();
    
      handleChange = (e) => {
        this.setState({
          password: e.target.value,
        });
      };
    
      handleButtonClick = () => {
        this.setState({
          clicked: true,
          validated: this.state.password === "0000",
        });
        this.input.focus();
      };
    
      render() {
        return (
          <div>
            <input
              ref={(ref) => (this.input = ref)} //input을 ref로 등록해두고 다른 곳에서 접근이 가능하다.
              type="password"
              value={this.state.password}
              onChange={this.handleChange}
              className={
                this.state.clicked
                  ? this.state.validated
                    ? "success"
                    : "failure"
                  : ""
              }
            />
            <button onClick={this.handleButtonClick}>검증하기</button>
          </div>
        );
      }
    }
    
    export default ValidationSample;

    <주의>
    서로 다른 컴포넌트끼리 데이터를 교류할 때 ref를 사용하는 것은 잘못된 것이다.

    -> 가능하긴 하지만, 그럴 경우 스파게티 코드가 되어버림.

    -> Redux, Context API를 사용해서 해결함.

    728x90
    반응형

    '코테이토 동아리 > [코테이토]React 스터디 5기' 카테고리의 다른 글

    7장. 컴포넌트의 라이프사이클 메서드  (0) 2023.01.27
    6장. 컴포넌트 반복  (0) 2023.01.27
    4장. 이벤트 핸들링  (0) 2023.01.27
    3장. 컴포넌트  (0) 2023.01.16
    2장. JSX  (0) 2023.01.16