3. Selectors
Selector λ μνλ₯Ό κΈ°λ°μΌλ‘ μ λ¬λ λ°μ΄ν°λ₯Ό κ°κ³΅ν λ μ¬μ©λ©λλ€.
selector()
ν¨μμ key μ get μ set λ₯Ό μ λ¬νμ¬ μμ±ν©λλ€.
import { selector } from 'recoil';
...
const fontSizeLabelState = selector({
key: 'fontSizeLabelState',
get: ({get}) => {
const fontSize = get(fontSizeState);
const unit = 'px';
return `${fontSize}${unit}`;
},
});
get
νλ‘νΌν°λ κ³μ°μ μ¬μ©λλ ν¨μμ
λλ€.
μ λ¬λ get
μΈμλ₯Ό μ¬μ©ν΄μ μν°(Atom)μ΄λ λ€λ₯Έ μ
λ ν°(Selector)μ μ κ·Όν μ μμΌλ©°, μ κ·Όν μν°μ΄λ μ
λ ν°κ° μ
λ°μ΄νΈ λλ©΄ λ€μ κ³μ°λ©λλ€.
μ μμ μ μ
λ ν°λ fontSizeState
μνλ₯Ό κ°μ Έμ ν°νΈ μ¬μ΄μ¦λ₯Ό μΆλ ₯νλ μμ ν¨μμ²λΌ λμν©λλ€.
μ
λ ν°λ μΈ μ(write)μκΈ° λλ¬Έμ useRecoilState
λ₯Ό μ¬μ©νμ§ μκ³ useRecoilValue
λ₯Ό μ¬μ©ν©λλ€.
import { useRecoilState, useRecoilValue } from 'recoil';
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>
</>
);
}
Last updated
Was this helpful?