[Recoil] Recoil의 사용 : Recoil Hooks
작성:    
업데이트:
카테고리: Recoil
useRecoilState
- atom이나 selector의 값을 사용할 때 사용
- recoil 상태를 인자로 받는다.
- selector의 경우 set을 설정해주지 않으면 사용하지 못한다.
const [count, setCount] = useRecoilState(countState);
const increaseCount = () => {
setCount(count + 1);
}
심화
// src/components/Organisms/QuizDifficulty.tsx
// 1. state에 정의된 QuizDifficulty.ts를 불러오는 방법
import { QuizDifficultyState } from 'src/state';
...
const QuizDifficulty = () => {
// 2. recoilState의 사용방법 : Hook처럼 사용방법
const [quizDifficulty, setQuizDifficulty] = useRecoilState(
QuizDifficultyState,
)
const handleChange = (e: ChangeEvent<HTMLSelectElement>) => {
setQuizDifficulty(e.target.value);
};
return (
<select
data-testid={DIFFICULTY_SELECT_TEST_ID}
margin="16px 0px"
value={quizDifficulty}
onChange={handleChange}
>
</select>
);
};
왜 QuizDifficulty가 아니라 QuizDifficultyState 인거죠?
// src/state/index.ts
import QuizDifficultyState from './QuizDifficulty';
import QuizResultsState from './QuizResults';
...
export {
QuizDifficultyState,
QuizResultsState,
...
};
- 구조분해할당으로 컴포넌트 내에서 한 번에 import하기 위한
index.ts
처리 - 이 과정에서
State
가 파일명 뒤에 붙어서 export
useRecoilValue
useRecoilState
의 기능 중 get(read-only)만을 위한 hook- recoil state의 값을 반환
const count = useRecoilValue(countState);
useSetRecoilState
useRecoilState
의 기능 중 set만을 위한 hook- recoil state의 값을 변경
const setCount = useSetRecoilState(countState);
useResetRecoilState
- atom이나 selector의 값을 초기화할 때 사용
- atom과 selector의 경우 다르게 사용
atom
const resetCount = useResetRecoilState(countState);
...
<button onClick={resetCount}>reset count</button>
- atom 등록 시의 default값으로 atom을 되돌린다.
selector
// sumCountSelector.ts
import { DefaultValue, selector } from "recoil";
import countState from "../atom/countState";
export default selector({
key: "countSelector",
get: ({get}): number => {
const count = get(countState);
return count + 1;
},
set: ({set, get}, newCount:any)=>{
return set(
countState,
newCount instanceof DefaultValue ? newCount : newCount+10,
)
}
})
- set은 DefaultValue 객체를 매개변수로 전달
- 때문에 selector에서 set을 사용할 때 조건 처리를 해주어야 한다.
- 일반적으로 set을 할 경우 받아온 카운트에 10을 더해서 반환하지만, DefaultValue가 오게 되면 초깃값을 반환
// handleCount.tsx
const resetSumCount = useResetRecoilState(sumCountSelector);
...
<button onClick={resetSumCount}>reset count</button>
댓글남기기