const fontSizeState = atom({
key: 'fontSizeState',
default: 10,
});
=> 모든 atoms의 map을 볼 수 있는 특정 고급 API에 사용되는 고유한 키
React의 useState와 비슷하지만, 상태가 컴포넌트 간 공유된다.
const fontSizeLabelState = selector({
key: 'fontSizeLabelState',
get: ({get}) => {
const fontSize = get(fontSizeState);
const unit = 'px';
return `${fontSize}${unit}`;
},
});
=> 계산될 함수. get인자로 atoms와 다른 selectors에 접근한다.
위의 예시에선 selector가 fontSizeState 라는 하나의 atom에 의존성을 가진다. selector에는 fontSizeState를 입력으로 사용하고 fontSize를 출력으로 반환하는 순수함수처럼 동작한다.
selector는 useRecoilValue()로 읽을 수 있다. 하나의 atom이나 selector를 인자로 받아 대응하는 값을 반환한다. 위의 예시에서는 selector가 writable하지 않으므로 사용하지 않는다.
function FontButton() {
const [fontSize, setFontSize] = useRecoilState(fontSizeState);
const fontSizeLabel = useRecoilValue(fontSizeLabelState);
return (
<>
<div>Current font size: ${fontSizeLabel}</div>
<button onClick={setFontSize(fontSize + 1)} style={{fontSize}}>
Click to Enlarge
</button>
</>
);
}