-
Notifications
You must be signed in to change notification settings - Fork 0
Recoil
Recoil은 Facebook에서 만든 React를 위한 상태관리 라이브러리이다. Redux의 상태관리는 기본적으로 상용구 코드(boilderplate code)가 많이 발생하는데다 combineReducer를 통한 reducer 분할이 가능하다 하더라도 Recoil의 atom과 같은 유연함은 결코 제공할 수 없다. 컴포넌트의 useMemo처럼 파생 데이터를 생성할 수 있는 기능은 자체적으로 가지고 있지 않아서 reselect같은 외부 라이브러리의 힘을 빌려야한다. 그리고 atomEffect 처럼 특정 상태가 업데이트되었을 때 실행할 사이드 이펙트는 자체적으로 정의할 수 없으며 컴포넌트에서 상태를 구독한 후 useEffect 안에서 구현해야한다. Redux 미들웨어는 상태 업데이트 후에 실행되는 것이 아니라 dispatch된 모든 액션이 거쳐가는 곳이라 성격이 다르다.
Redux의 상태 구조는 트리형태이지만 Recoil은 유향 그래프(directed graph) 형태로 구성된다.
Recoil에서 데이터의 소스인 atom은 고유한 문자열 키를 가지는데, Recoil은 atom의 키를 구성하는 알파벳을 노드로 하여 그래프를 구성한다.(Trie)
Recoil에서 atom의 키는 고유한 값을 가져야하므로 그래프 상의 노드에는 언제나 1개의 atom만 존재하게 된다. 이는 곧 atom이 다른 atom의 영향을 받지 않는 독립적인 상태라는 말이기도 하다. Redux에서 그랬던 것처럼 reducer를 구현할 때 업데이트 대상이 아닌 값(=상태 객체의 다른 필드)들의 불변성을 보장하기 위해 immutable.js,immer같은 라이브러리의 사용을 고려할 필요가 없다.
이 외에도 Recoil은 React의 동시성 모드(Concurrent Mode) 및 신규 기능과의 호환성이 제공될 수 있으며 atom, selector 앱 개발에 따라 점진적으로 추가할 수 있어서 코드 분할에 용이하다는 점, 비동기 selector를 통한 원격 데이터 구독등 다양한 특징을 가지고 있다.