ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [React] Hooks
    React 2024. 3. 8. 22:54

    React Hook(훅) 이란?

    https://react.dev/reference/react/hooks

     

    Built-in React Hooks – React

    The library for web and native user interfaces

    react.dev

    • React 16.8 버전에서 새로 추가된 기능으로, 기존의 Class형 Component을 사용하면서 발생하는 문제점들을 해결하기 위해 도입됨

     

     

     

    Component에 대하여

    • 리액트에서는 UI를 "컴포넌트"라는 단위를 이용하여 구분함.
    • 컴포넌트 관리의 핵심은 state생명주기를 다루는 것에 있음.
    • Class형 컴포넌트와 함수형 컴포넌트로 나뉨

     

     

     

    Class Component

    [정상우님의 블로그] 에서 코드의 예시를 가져왔습니다.
    class Home extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          lookups: null
        };
        // this를 사용하기 위해서 아래와 같이 바인드메서드 사용
        this.fetchLookups = this.fetchLookups.bind(this);
      }
    
      // -------------------- 생명주기 관리 부분 ---------------------------
      componentDidMount() {
        this.fetchLookups(this.props.pathName);
      }
      componentDidUpdate(prevProps) {
        // pathName prop이 변경 되었을 때
        if (prevProps.pathName !== this.props.pathName) {
          this.fetchLookups(this.props.pathName);
        }
      }
      // -------------------------------------------------------------------
        
      // API 호출용 함수
      fetchLookups(pathName) {
        fetchApi({ url: `/lookup?url=${pathName}` }).then((lookups) => {
      	  // lookups 데이터가 반환 되면 state업데이트
          this.setState({
            lookups
          });
        });
      }
      
      // 렌더 함수
      render() {
        if (!this.state.lookups) return null;
        return <pre>{JSON.stringify(this.state.lookups)}</pre>;
      }
    }
    • Class형 컴포넌트에서는 state를 선언하고 관리할 수 있으며, life cycle과 관련된 각종 메서드들이 제공됨.
    • Class형 컴포넌트를 사용하던 시기에도 함수형 컴포넌트는 존재했지만, state나 life cycle이 존재하지 않는 순수한 UI 컴포넌트를 위해 사용되었음.
    • 문제점
      • 컴포넌트 사이에서 상태와 관련된 로직을 재사용하기가 어려움(고차 컴포넌트(HOC), render props와 같은 방법을 사용해야함)
      • 생명주기 함수 내부에 비즈니스 로직을 확장해야하는 경우, 따로 분리하기가 힘들며 테스트 하기도 쉽지 않음
      • state, props, 컴포넌트 내의 메서드 호출... 등을 위해 Javascript의 this에 대한 이해가 필요함.

     

     

     

    Hook의 등장

    [정상우님의 블로그]에서 코드의 예시를 가져왔습니다.
    const HomeWithHook = ({ pathName }) => {
      const [lookups, updateLookups] = useState(null);
      
      // 생명주기 관리 부분
      useEffect(() => {
        if (pathName) {
          fetchApi({ url: `/lookup?url=${pathName}` }).then((lookups) => {
            updateLookups(lookups);
          });
        }
        // 컴포넌트가 생성 되었을 때 처음 실행되며, 이후 pathname이 변경되었을 때에도 실행
      }, [pathName]);
      if (!lookups) return null;
      return <pre>{JSON.stringify(lookups)}</pre>;
    };
    • Hook의 등장으로 state와 life cycle을 관리하기 편리해졌다

    'React' 카테고리의 다른 글

    [React] React의 장단점  (0) 2024.01.31
    [React] React란 무엇인가?  (0) 2024.01.29
Designed by Tistory.