React Context API와 Recoil:상태 관리를 효율적으로 극복하는 Recoil의 등장

jsonLee·2023년 8월 2일
1
post-thumbnail

1.React Context API의 장점과 단점

장점:

1.전역 상태 관리:

Context API는 React 애플리케이션 전역에서 상태를 관리할 수 있습니다. Provider를 사용하여 상태를 제공하고 useContext hook을 사용하여 상태를 사용할 수 있으며, 이를 활용하여 상위 컴포넌트에서 하위 컴포넌트로 데이터를 효율적으로 전달할 수 있습니다.

2.중앙 집중화된 상태 관리:

Context API를 사용하면 상태를 컨테이너에 중앙 집중화하여 관리할 수 있습니다. 이를 통해 애플리케이션의 상태 변화를 추적하고 디버깅하는 것이 용이해집니다.

3.간편한 상태 공유:

하위 컴포넌트에서 상위 컴포넌트로 데이터를 전달하기 위해 별도의 prop 전달이 필요 없으며, Context API를 사용하여 쉽게 상태를 공유할 수 있습니다.

단점:

1.Provider-Consumer 구조:

Context API는 Provider-Consumer 구조를 사용하며, 이로 인해 여러 개의 Provider를 사용해야 하는 경우 코드가 복잡해질 수 있습니다.

2.리렌더링 이슈:

Context API에서 Provider의 상태가 변경될 때, 하위 컴포넌트 전체가 리렌더링될 수 있습니다. 이로 인해 성능 이슈가 발생할 수 있습니다.

3.복잡성과 유지보수 어려움:

컨텍스트가 복잡한 구조를 가지거나 애플리케이션 규모가 커질수록 코드의 유지보수가 어려워질 수 있습니다.

2. Recoil: Context API의 단점을 극복하는 새로운 접근 방식

Recoil은 Facebook에서 개발한 새로운 상태 관리 라이브러리로, Context API의 단점을 극복하고 개발자에게 편리한 상태 관리를 제공합니다. Recoil은 전역 상태를 효율적으로 관리하기 위한 다양한 기능을 제공합니다.

Recoil의 특징과 장점:

1.Atoms와 Selectors:

Recoil은 상태를 정의하는데에 atom과 상태를 가져오거나 계산하는데에 selector를 사용합니다. 이를 통해 상태를 하나의 중심점에서 관리하면서 필요한 상태에만 접근하는 것이 가능해집니다.

2.전역 상태 추적:

Recoil은 상태 변경에 따른 의존성을 추적하고, 이를 사용하는 컴포넌트들만 리렌더링하도록 최적화되어 있습니다. 이로 인해 불필요한 리렌더링이 줄어들어 성능을 향상시킵니다.

3.중앙 상태 관리:

Recoil은 Context API와 마찬가지로 전역 상태를 중앙 집중화하여 관리합니다. 하지만 Recoil은 더욱 간편한 API와 상태의 의존성 추적으로 상태 관리를 효율적으로 처리합니다.

4.선언적 상태 관리:

Recoil은 상태와 상태 변경 로직을 더욱 선언적으로 정의할 수 있어 코드의 가독성과 유지보수성을 높여줍니다.

Recoil의 예시 코드:

// atoms.js (Recoil 상태 정의)
import { atom, selector } from 'recoil';

export const countState = atom({
  key: 'countState',
  default: 0,
});

export const doubledCountState = selector({
  key: 'doubledCountState',
  get: ({ get }) => {
    const count = get(countState);
    return count * 2;
  },
});
// ComponentA.js
import React from 'react';
import { useRecoilValue } from 'recoil';
import { countState, doubledCountState } from './atoms';

const ComponentA = () => {
  // Recoil 상태 읽어오기
  const count = useRecoilValue(countState);
  const doubledCount = useRecoilValue(doubledCountState);

  return (
    <div>
      <p>Count in Component A: {count}</p>
      <p>Doubled Count in Component A: {doubledCount}</p>
    </div>
  );
};

export default ComponentA;

Recoil은 상태 관리를 선언적으로 처리하면서, Context API의 단점을 극복하고 개발자에게 효율적인 상태 관리를 제공합니다. 이를 통해 React 애플리케이션의 전역 상태를 관리하는데 더욱 편리하고 효율적인 방법을 제공합니다.

REFERENCE

https://velog.io/@hyerin0930/%EC%A0%84%EC%97%AD%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC-Context-API-vs-Recoil

profile
풀스택 개발자

0개의 댓글