Skip to main content

Command Palette

Search for a command to run...

[React] recoil: 리액트 상태 관리 라이브러리

Published
1 min read

recoil이라는 상태 관리 라이브러리의 핵심 개념들에 대해서 설명하겠습니다. 그런데 개념 그 자체보단 해당 개념을 어떻게 바꿔서 이해할 수 있는지를 적어보려고 합니다.

RecoilRoot

전역 상태 관리 라이브러리는 대부분 React의 Context API를 내부적으로 활용합니다. 그래서 상위 노드에 Provider를 하나 끼워넣기 위한 컴포넌트를 제공하는데요, recoil에서는 그 컴포넌트가 RecoilRoot입니다.

참고로 일반적으로 이런 Provider들은 하위 노드에서 사용되는 API들을 위한 전역 저장소 역할을 합니다. 상위 노드에서 useState를 잔뜩 한 뒤에 Context.Provider로 값과 업데이트 함수들을 전부 아래로 넘겨주는 셈이 되죠. 근데 이러면 가독성이 너무 안 좋아지고 렌더링이 엄청나게 자주 일어나게 되기에 이를 잘 최적화해둔 전역 상태관리 라이브러리를 사용하는 것입니다.

Atom

Atom은 상태를 나타내지만 상태를 저장하고 있진 않습니다. 상태를 위한 메타데이터를 저장해둔 것이라고 보시면 됩니다.

바로 위에서 useState를 잔뜩 한 뒤에 Context API로 상태들을 넘겨주는 것과 비슷하다고 했는데, Atom 은 해당 값들을 구분하기 위한 키 역할이라고 생각하시면 됩니다.

useRecoilState

현재 컴포넌트가 특정 Atom을 사용하고, 의존성이 있다고 표현하기 위한 수단입니다. useState와 비슷하지만, RecoilRootAtom이 같다면 같은 값을 가집니다. 즉, useState를 상위 컴포넌트에서 한 뒤 Context API나 Property drilling으로 넘겨준 것이랑 개념적으로 비슷합니다.

selector

recoil의 전역 상태들을 위한 useMemo입니다. 모든 값을 의존성으로 가질 수 있는 useMemo와 달리 전역 상태인 Atom만을 의존성으로 가질 수 있습니다.

More from this blog

[ZSH] tree 사용하기

들어가며 큰 규모의 프로젝트를 출시한 뒤, 후일을 위해서 더 늦기 전에 파일 정리 및 문서화를 진행해야했다. 문서화 작업을 하는 중에 기왕 정리하는 거 파일 구조를 이쁘게 트리 구조로 나열하여 코멘트를 달면 나중에 보더라도 이해하기 더 쉬울 것 같았다. 어떻게 해야 간지나는 트리 구조를 만들 수 있을까 방법을 찾다보니 역시나 파일 구조를 트리로 이쁘게 출력해주는 커맨드 툴이 존재했다. tree 커맨드에 대해서 알아보고 알짜배기 내용만 정리했다....

Feb 21, 20242 min read

[Next.js] parallel routes & intercepting routes

트위터 로그인 모달창을 만들어보며 넥스트의 parallel routes 와 intercepting routes 을 학습한 내용을 정리해보았습니다. 트위터 로그인 창을 확인해봅시다. 루트 디렉토리 화면을 배경으로 i/flow/login 페이지가 동시에 표시되고 있습니다. 저는 app router 를 학습하기 전까지는 createPortal 을 사용하여 포탈 영역에 로그인 컴포넌트를 띄우는 방식을 사용했었습니다. const NoLogin =()=...

Feb 1, 20244 min read

C/C++ 이진 트리(binary tree) 개요 및 구현(1)

개요 트리는 노드들이 나무 가지처럼 연결된 비선형 계층적 자료구조이다. 하위 트리가 존재하고, 그 노드에 또 하위 트리가 존재하는 자료구조 이다. 트리의 맨 위에 있는 루트 노드가 존재한다. 우리가 알아볼 트리는 이진 트리이다. 이진 트리는 자식 노드(부모로부터 아래로 이어진 노드)가 2개 이하인 구조를 말한다. 트리의 사용 사례로는 다음과 같다 계층 적 데이터 저장(파일,폴더) 효율적인 검색 속도 힙 데이터 베이스의 인덱싱 트리에 ...

Jan 31, 20244 min read

[React] Server component (RSC)

React.js 18 에 도입된 리액트 서버 컴포넌트는 서버에서 동작하는 리액트 컴포넌트를 의미합니다. Next가 권장하는 라우팅 방식인 app router의 기반이 되는 컴포넌트이기 때문에 app router 를 이해하기 위해서는 server component 에 대한 이해가 필요합니다. server component 리액트는 클라이언트단만을 컴포넌트화하는 대신, server component라는 개념을 통해 서버 영역을 컴포넌트화합니다. ...

Jan 29, 20243 min read

Flutter, JavaScript

42 posts