React에서 컴포넌트 언마운팅 가로채기 (함수형 및 클래스 컴포넌트)

리액트 인터셉트 컴포넌트 언마운팅: 함수형 컴포넌트와 클래스 컴포넌트에 대한 포괄적인 가이드 리액트 컴포넌트 라이프사이클의 중요한 부분 중 하나는 컴포넌트가 언마운트 되기 직전에 언마운트를 인터셉트할 수 있는 능력입니다. 함수형 컴포넌트든 클래스 컴포넌트든, 이 언마운팅 이벤트를 캡처하는 …

title_thumbnail(React에서 컴포넌트 언마운팅 가로채기 (함수형 및 클래스 컴포넌트))

리액트 인터셉트 컴포넌트 언마운팅: 함수형 컴포넌트와 클래스 컴포넌트에 대한 포괄적인 가이드

리액트 컴포넌트 라이프사이클의 중요한 부분 중 하나는 컴포넌트가 언마운트 되기 직전에 언마운트를 인터셉트할 수 있는 능력입니다. 함수형 컴포넌트든 클래스 컴포넌트든, 이 언마운팅 이벤트를 캡처하는 방법을 이해하면 필요한 클린업 작업을 수행하거나 다른 작업을 트리거하는 데 중요한 역할을 할 수 있습니다. 이 가이드에서는 함수형과 클래스 컴포넌트 양쪽에서 이를 달성하는 기술을 탐구해보겠습니다.

클래스 컴포넌트에서의 언마운팅 인터셉트

클래스 컴포넌트에서는 componentWillUnmount 라이프사이클 메서드를 활용하여 언마운팅 이벤트를 인터셉트할 수 있습니다. 이를 달성하기 위해 컴포넌트를 고차 함수로 데코레이션하여 componentWillUnmount 메서드에 사용자 정의 로직을 추가하는 방법을 사용할 수 있습니다.

function observe(component) {
  const p = component.type.prototype;
  const delegate = p.componentWillUnmount || function noop() {};

  if (!delegate.__decorated) {
    p.componentWillUnmount = function() {
      console.log('언마운트 될 것입니다');

      return delegate.apply(this, arguments);
    }

    p.componentWillUnmount.__decorated = true;
  }

  return component;
}

observe 함수를 클래스 컴포넌트에 적용함으로써 컴포넌트가 언마운트될 때마다 사용자 정의 로직이 실행되도록 보장할 수 있습니다.

예시 사용법:

class Comp extends React.Component {
  render() {
    return (<h1>안녕하세요</h1>);
  }
}

class App extends React.Component {
  render() {
    const active = this.state && this.state.active;
    const toggle = () => this.setState({
      active: !active,
    });

    return (
      <div>
        <button onClick={toggle}>전환</button>
        <hr />
        {active && observe(<Comp />)}
      </div>
    );
  }
}

위의 구현으로, <App /> 컴포넌트 내에서 <Comp /> 컴포넌트가 언마운트될 때마다 observe 함수 내의 사용자 정의 로직이 트리거됩니다.

함수형 컴포넌트에서의 언마운팅 인터셉트

함수형 컴포넌트는 리액트 개발에서 점점 더 인기를 얻고 있지만, componentWillUnmount와 같은 전통적인 리액트 라이프사이클 메서드는 이러한 유형의 컴포넌트에서 사용할 수 없습니다.

하지만 함수형 컴포넌트에서도 언마운팅 이벤트를 인터셉트하는 방법이 있습니다. 한 가지 접근 방식은 toClass라는 하이어오더 컴포넌트를 사용하여 함수형 컴포넌트를 클래스 컴포넌트로 감싸는 것입니다. 이렇게 하면 componentWillUnmount 메서드를 활용할 수 있습니다.

import { toClass } from 'recompose';

function observe(component) {
  const classComponent = toClass(component);
  const p = classComponent.type.prototype;
  const delegate = p.componentWillUnmount || function noop() {};

  if (!delegate.__decorated) {
    p.componentWillUnmount = function() {
      console.log('언마운트 될 것입니다');

      return delegate.apply(this, arguments);
    }

    p.componentWillUnmount.__decorated = true;
  }

  return classComponent;
}

toClass를 사용하여 함수형 컴포넌트를 감싼 후, 감싼 컴포넌트에 observe 함수를 적용함으로써 언마운팅 이벤트를 인터셉트할 수 있습니다.

예시 사용법:

function Comp() {
  return (<h1>안녕하세요</h1>);
}

class App extends React.Component {
  render() {
    const active = this.state && this.state.active;
    const toggle = () => this.setState({
      active: !active,
    });

    return (
      <div>
        <button onClick={toggle}>전환</button>
        <hr />
        {active && observe(<Comp />)}
      </div>
    );
  }
}

observe 함수를 감싼 함수형 컴포넌트에 적용함으로써 같은 결과를 얻을 수 있고, 언마운팅 이벤트를 인터셉트할 수 있습니다.

마무리

리액트 컴포넌트에서 언마운팅 이벤트를 인터셉트하는 방법을 이해하는 것은 필요한 클린업을 수행하거나 추가 작업을 트리거하는 데 매우 중요합니다. 클래스 컴포넌트에서는 componentWillUnmount 라이프사이클 메서드를 활용하고, 함수형 컴포넌트에서는 toClass HOC를 사용하여 컴포넌트를 감싸고 인터셉트를 활성화할 수 있습니다.

이러한 기술을 구현함으로써 다양한 유형의 리액트 컴포넌트의 언마운팅 프로세스를 완전히 제어하여 응용 프로그램을 제대로 관리하고 최적화하는 데 도움이 될 수 있습니다.

참고 자료 : 

reactjs

Leave a Comment