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