상태관리 라이브러리인 Recoil이 업데이트를 중단했다... 한참 전 부터 기질이 있긴 했지만 정말 중단되며 나는 큰 고민에 빠졌다. atom에 익숙해져있던 나는 Redux를 쓰기에는 배우는데 시간이 꽤 걸릴것 같아 고민을 하던중 atom 기반의 Jotai를 발견하게 되었다!
Jotai에 대해 알아보기 전 친구는 나에게 물었다.
🤷🏻♀️ : 라이브러리가 업데이트 중단 됐다고 해도 걍 쓰면 되는거 아님? 왜 바꿈?
나 : 엄.... 그러게...
그래서 알아보았다 업데이트 중단된 라이브러리를 쓰면 안되는이유
Jotai는 2020년 Pedro Nauck에 의해 처음 소개된 React를 위한 상태 관리 라이브러리로, Redux나 Modx와 같은 다른 인기있는 상태 관리 라이브러리의 대안으로 등장하게 되었다. Jotai의 주요 아이디어는 최소한의 API를 제공하여 React에서 상태 관리를 간단하게 만드는 것이다.
Jotai의 사용법을 알아보기 전 Redux..Modx와 같은 상태관리에 대한 접근 방식을 알아보겠다
- Flux (Redux, Zusstand)
- Proxy (Mobx, Valtio)
- Atomic (Jotai, Recoil)
Flux
일반적으로 많이 쓰는 Flux 패턴인 리덕스를 보면 액션을 통해 앱 상태를 변화시키고, 컴포넌트는 selector를 사용해 전역 상태의 일부를 subscribing 하는 형태로 동작한다. 리덕스 환경에서 stor에 있는 값을 변경하기 위해서는 액션 함수를 실행하고 특정 액션 타입을 리듀서에 전달하는 방식으로 변화를 전달해야 한다. 그러다보니 보일러플레이트가 아주 많고 데이터를 변화시키기 위해 작성해야 하는 코드 양도 많다.
Proxy
Mobx에서는 전체 상태에 대한 엑세스를 제공하고, 컴포넌트에서 사용되는 일부 상태를 자동으로 감지하고 업데이트만 인지해서 사용한다. 리덕스보다 디버깅은 어렵지만 store에 있는 데이터를 바로 변경할 수 있는 Mobx가 더 편하게 느껴질 때도 많을것을다.
Atomic
Jotai와 recoil 같은 Atomic 접근 방식은 React애서 사용되는 state와 비슷하게 리액트 트리안에서 상태를 저장하고 관리하는 방법이다.
import {atom} from "jotai"
const countAtom = atom(0)
const mangaAtom = atom({'label': '', 'content':''});
const [value, setValue] = useAtom(countAtom)
이런식으로 Jotai를 사용하면되는데 기존의 Recoil 방식은 key와 디폴트값을 정해서 코드를 선언해놓는 반면 Jotai는 한줄로 선언이 가능하다. recoil보다 편한데..?
import {useAtom} from "jotai"
function Counter(){
const [count, setcount] = useAtom(countAtom);
function increment(){
setCount((c) => c + 1);
}
return(
<div>
<p>Count : {count}</p>
<button onClick={increment}>Imcrement</button>
</div>
);
}
간단하게 Counter 컴포넌트를 만들어보았다. useAtom 훅을 사용하여 상태에 접근하고, setCount 함수를 사용해서 상태를 업데이트한다. setCount 함수가 호출될 때마다 counterAtom을 사용하는 모든 컴포넌트가 리랜더링된다.
Jotai는 아직 상대적으로 새로운 라이브러리며, 커뮤니티가 크지 않다. 또한 Redux와 같은 다른 상태관리 라이브러리보다 덜 검증되었다. 따라서 Jotai를 사용하기 전에 프로젝트의 요구 사항과 함께 검토해 보는 것이 좋을 것 같다.
Recoil을 jotai로 모두 리팩토링 해야하는데 진짜 큰일났다...
참고자료
https://youngme92.vercel.app/blog/react-jotai
https://velog.io/@ggong/%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-jotai