recoil 의 snapshot 은 왜 필요할까?
이건 결국 jotai 에서 useAtomCallback 에 get 도 궤를 같이함.
recoil 에서 snapshot 이라는 인터페이스를 뚫어주고, jotai에서도 비슷한 인터페이스 (get)를 뚫어준건 useRecoilValue
와 같은 훅으로 상태를 접근하게 될 경우, 해당 훅으로 선언된 상태는 컴포넌트/훅의 라이프사이클에 묶여버리기 때문 (클로저 현상때문에). 따라서, 상태가 사용되는 함수 내부에서 클로저로 인한 쓰레기값을 참조하는걸 방지하기 위해 이런 인터페이스를 뚫어준듯.
짧게 줄이면
- 훅으로 인한 값 선언을 할 경우 함수 컴포넌트 내부에서 클로저 현상으로 쓰레기 값이 되버릴 수 있음 -> 이 때 잘못된 값 참조하는걸 방지하기 위해서 jotai 는 useAtomCallback -> get / recoil 은 snapshot 이란 인터페이스 뚫어줌.
- 훅과 컴포넌트의 리액트 생명주기에서 벗어나, 상태에 접근하기 위한 메커니즘
추가로.. Recoil 의 해당 인터페이스 이름이 snapshot 이어서 과거 데이터를 묶는다는건줄 알았는데..그것보다는 그냥 현재 데이터를 바로 참조하는 것에 가까웠음.
과거의 값 저장하고, 불러오려면 별도의 로직이 필요한듯..