FRONT-END/REACTJS

컴포넌트에 ref 달기

JINGMONG 2021. 12. 24. 01:03

리액트에서는 컴포넌트에도 ref를 달 수 있다. 컴포넌트 내부에 있는 DOM을 컴포넌트 외부에서 사용할 때 사용한다.

<MyComponent ref={(ref) => {this.myComponent=ref}} />

이렇게 하면 MyComponent 내부의 메서드 및 멤버 변수에도 접근할 수 있다.

import React, { Component } from 'react';

class ScrollBox extends Component {
  scrollToBottom = () => {
    const { scrollHeight, clientHeight } = this.box;
    this.box.scrollTop = scrollHeight - clientHeight;
  };
  render() {
    const style = {
      border: '1px solid black',
      height: '300px',
      width: '300px',
      overflow: 'auto',
      position: 'relative',
    };

    const innerStyle = {
      width: '100%',
      height: '650px',
      background: 'linear-gradient(white, black)',
    };

    return (
      <div
        style={style}
        ref={(ref) => {
          this.box = ref;
        }}
      >
        <div style={innerStyle}></div>
      </div>
    );
  }
}

export default ScrollBox;
import { Component } from 'react';
import ScrollBox from './ScrollBox';

class App extends Component {
  render() {
    return (
      <div>
        <ScrollBox
          ref={(ref) => {
            this.ScrollBox = ref;
          }}
        />
        <button onClick={() => this.ScrollBox.scrollToBottom()}>
          맨 밑으로
        </button>
      </div>
    );
  }
}

export default App;
<button onClick={this.ScrollBox.scrollToBottom()}>

이렇게 쓰는 것도 틀린 것은 아니지만 컴포넌트가 처음 랜더링 하는 과정에서 오류가 발생할 수 있음

<button onClick={() => this.ScrollBox.scrollToBottom()}>

화살표 함수를 사용하여 새로운 함수로 만들고 사용해야 오류를 막을 수 있음리액트에서는 컴포넌트에도 ref를 달 수 있다. 컴포넌트 내부에 있는 DOM을 컴포넌트 외부에서 사용할 때 사용한다.

<MyComponent ref={(ref) => {this.myComponent=ref}} />

이렇게 하면 MyComponent 내부의 메서드 및 멤버 변수에도 접근할 수 있다.

import React, { Component } from 'react';

class ScrollBox extends Component {
  scrollToBottom = () => {
    const { scrollHeight, clientHeight } = this.box;
    this.box.scrollTop = scrollHeight - clientHeight;
  };
  render() {
    const style = {
      border: '1px solid black',
      height: '300px',
      width: '300px',
      overflow: 'auto',
      position: 'relative',
    };

    const innerStyle = {
      width: '100%',
      height: '650px',
      background: 'linear-gradient(white, black)',
    };

    return (
      <div
        style={style}
        ref={(ref) => {
          this.box = ref;
        }}
      >
        <div style={innerStyle}></div>
      </div>
    );
  }
}

export default ScrollBox;
import { Component } from 'react';
import ScrollBox from './ScrollBox';

class App extends Component {
  render() {
    return (
      <div>
        <ScrollBox
          ref={(ref) => {
            this.ScrollBox = ref;
          }}
        />
        <button onClick={() => this.ScrollBox.scrollToBottom()}>
          맨 밑으로
        </button>
      </div>
    );
  }
}

export default App;
<button onClick={this.ScrollBox.scrollToBottom()}>

이렇게 쓰는 것도 틀린 것은 아니지만 컴포넌트가 처음 랜더링 하는 과정에서 오류가 발생할 수 있음

<button onClick={() => this.ScrollBox.scrollToBottom()}>

화살표 함수를 사용하여 새로운 함수로 만들고 사용해야 오류를 막을 수 있음

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

컴포넌트의 라이프사이클  (0) 2021.12.28
컴포넌트 반복  (0) 2021.12.26
ref 사용  (0) 2021.12.24
ref를 사용하는 상황  (0) 2021.12.24
이벤트 핸들링  (0) 2021.12.20