
React의, React에 의한, React를 위한 상태관리 라이브러리
얼마 전에 Redux에 대한 내용을 정리했다.
Redux는 상당히 복잡하다.
액션 객체를 정의해줘야 하고, 액션이 디스패치 하면 액션 객체를 스토어에 보내야하고, 스토어에서는 리듀서 함수로 상태를 변경시켜야하고, 그러기 위해 리듀서 함수를 작성해야 하고, 리듀서를 통해 반환된 상태 값을 UI에 다시 전달해줘야 한다.
즉, 보일러 플레이트 코드가 많다. (action, connect, mapStateToProps 등등)
RTK의 등장으로 비교적 사용이 간편해 졌다고 한다.
Recoil은 페이스북에서 만든 리액트 상태관리 라이브러리이다.
리코일은 아래와 같은 장점이 있다.
Recoil State를 사용하려면, recoil 상태를 사용하고자 하는 컴포넌트의 부모에 RecoilRoot를 선언해주어야 한다.
여기서는 App에 RecoilRoot를 선언하였다.
Atoms는 state의 단위이며, 업데이트와 구독이 가능하다.
atom() 을 사용한다.useRecoilState() 를 사용한다.useState() 와 상당히 유사하다.useRecoilState()는 상태값과 setter 함수를 리턴한다. → useState() 와 매우 유사Selector는 전역 상태 값을 기반으로 어떤 계산을 통해 파생된 상태를 반환하는 순수함수이다.
RecoilValueReadOnly 객체를 반환한다.RecoilState 객체를 반환한다.selector도 key를 가진다.
위 counNextState에서는 get만 제공하므로, RecoilValueReadOnlay 객체를 반환할 것이다.
CounterInfo 컴포넌트에서는 useRecoilValue를 사용해 countNextState 값을 읽어온다.
여기서 countNextState는 selector에서 get만 제공 되기 때문에, 읽기 전용이다.
따라서 setter 없이 state를 읽기만 하는 컴포넌트에서 유용하다.
useRecoilState() : atom을 읽고, 쓰기 위해 사용. 컴포넌트는 atom을 구독함.useRecoilValue() : atom을 읽기만 할 때 사용. 컴포넌트는 atom을 구독함.useSetRecoilState() : atom을 쓰려고만 할 때 사용.useResetRecoilState() : atom을 defualt 값으로 초기화 할 때 사용recoil에서 비동기 처리 하는 방법을 알아보자.
selector에 선언한 randomDog 상태를 컴포넌트에서 사용해보자.
useRecoilValue는 값을 읽을때만 사용한다고 했다.
randomDog imageUrl에 담아 img태그의 src속성으로 사용했다.
API를 호출하는 도중에 대한 예외처리를 추가하기 위해 아래처럼 DogImage 컴포넌트를 Suspense 로 감싸고, fallback props로 로딩중 컴포넌트를 추가했다.
Recoil은 Redux에 비해 여러 장점이 있다.