FRONT-END/REACTJS

ref를 사용하는 상황

JINGMONG 2021. 12. 24. 01:02

리액트 컴포넌트 안에서도 id를 사용할 수 있지만 JSX 안에서 DOM에 id를 달면 해당 DOM을 렌더링 할 때 그대로 전달된다. 하지만 특수한 경우가 아니면 사용을 권하지 않는다.

같은 컴포넌트가 여러번 사용되는 경우 HTML에서 DOM의 id는 유일해야하는데 중복된 id를 가진 DOM이 여러 개 생기니 잘못된 사용이다.

ref는 전역적으로 작동하지 않고 컴포넌트 내부에서만 작동하기 때문에 문제가 발생하지 않는다.

DOM을 꼭 직접적으로 건드려야 할 때 ref를 사용한다.

.success {
  background-color: lightgreen;
}

.failure {
  background-color: lightcoral;
}
import React, { Component } from 'react';
import './ValidationSample.css';

class ValidationSample extends Component {
  state = {
    password: '',
    clicked: false,
    validated: false,
  };

  handleChange = (e) => {
    this.setState({
      password: e.target.value,
    });
  };

  handleButtonClick = () => {
    this.setState({
      clicked: true,
      validated: this.state.password === '0000',
    });
  };

  render() {
    return (
      <div>
        <input
          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;

위 예시를 보면 state를 사용하여 필요한 기능을 구현할 수 있다.

DOM을 꼭 사용해야 하는 상황

  • 특정 input에 포커스 주기
  • 스크롤 박스 조작하기
  • Canvas 요소에 그림 그리기 등

이 상황에서는 어쩔 수 없이 DOM에 직접적으로 접근해야 한다. 이를 위해 ref를 사용한다.

'FRONT-END > REACTJS' 카테고리의 다른 글

컴포넌트에 ref 달기  (0) 2021.12.24
ref 사용  (0) 2021.12.24
이벤트 핸들링  (0) 2021.12.20
state  (0) 2021.12.19
props  (0) 2021.12.19