TIL

TIL : Recoil

해말그미 2024. 6. 19. 23:40
확실히 처음 써봤을 때 보단 이해가 잘 된다. 처음보다 생각하고 적용하는 것 같다🐤

 

🌼 state management는 전역상태를 만드는 도구

props를 쓰면 안 쓰는 컴포넌트도 전달을 해주기 위해 쓰이면서 불필요한 렌더링이 발생한다.

 

state manegement를 구독하면, 컴포넌트가 상태를 변동하면 구독 중인 컴포넌트들이 통보를 받고 각자 렌더링이 시작된다. 즉 전역적인 상태를 가지는 것.

 

코드 줄이고 성능 높일 수 있다. 

이중에서 Recoil에 대해 알아보자!


🌼 RecoilRoot

상태관리 하고자 하는 컴포넌트의 부모에 <RecoilRoot>

<React.StrictMode>
<RecoilRoot>
  <App />
</RecoilRoot>
</React.StrictMode>

 

이렇게 하면 전역상태가 app 컴포넌트 밑에서 유효하다

 

🌼 전역상태를 atom이라 하고

import { atom } from 'recoil';

export const nickNameState = atom({
  key: 'nickName',
  default: '',
});

export const tagState = atom<number[]>({
  key: 'selectedTags',
  default: [],
});

 

key는 이름

default는 기본 값!

import { useRecoilState } from 'recoil';

const [nickName, setNickName] = useRecoilState<string>(nickNameState);
const [selectedTags, setSelectedTags] = useRecoilState<number[]>(tagState);

 

useRecoilstate를 사용한다는 것은 전역 상태를  구독하고 있다는 뜻

구독하고 있는 것들만 렌더링 된다.

 

아톰은 전역 공간에 있기 때문에 키값은 중복이 안 된다고 한다!

 

  const [nickName] = useRecoilValue<string>(nickNameState);
  const [selectedTags] = useRecoilValue<number[]>(tagState);

 

버튼을 클릭했을 때 값만 보내줄 것이라서 

useRecoilValue를 써서 아톰 안에 있는 값에 접근하기 위한 함수를 썼다.

useRecoilState() 이 함수는 값을 설정할 수 있다. 즉 읽고 쓰게 하는 함수

 


🧚‍♀️ 추가 공부 필요

- Selector 공부하고 코드에 적용해보기