YJzero 2023. 2. 8. 23:59

๐Ÿ“–์˜ค๋Š˜ ๋ฐฐ์šด  ๊ฒƒ

 

recoil

<RecoilRoot />

- ์—ฌ๋Ÿฌ <RecoilRoot> ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

 <RecoilRoot>๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๊ฐ™์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ atom ์ƒํƒœ๊ฐ€ providers/store๋œ๋‹ค.

  -> override๋ฅผ false๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ค‘์ฒฉ ๋  ๋•Œ ๋™์ผํ•˜๊ฒŒ ๋ฐœ์ƒ

 

* override๋ž€?

:๊ธฐ๋ณธ ๊ฐ’ true

 <RecoilRoot>๊ฐ€ ๋‹ค๋ฅธ  <RecoilRoot>์™€ ์ค‘์ฒฉ๋œ ๊ฒฝ์šฐ์—  true๋ผ๋ฉด  ํ•ด๋‹น ๋ฃจํŠธ๋Š” ๊ฐ๊ฐ ์ƒˆ๋กœ์šด reocil ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋งŒ์•ฝ false๋ผ๋ฉด ๋ฃจํŠธ์˜ ์ž์‹๋“ค์€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ  <RecoilRoot>์˜ recoil ๊ฐ’์— ์•ก์„ธ์Šคํ•œ๋‹ค.

 

 

atom

:recoil์˜ ์ƒํƒœ๋ฅผ ํ‘œํ˜„. ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ RecoilState ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • key: ๋‚ด๋ถ€์ ์œผ๋กœ atom์„ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด
  • default: atom์˜ ์ดˆ๊ธฐ ๊ฐ’
  • effects_UNSTABLE: atom์„ ์œ„ํ•œ ์„ ํƒ์ ์ธ atom Effects ๋ฐฐ์—ด
  • dangerouslyAllowMutability: recoil์€ atom์˜ ์ƒํƒœ ๋ณ€ํ™”์— ์˜์กดํ•˜๋Š”๋ฐ ๋งŒ์•ฝ atom์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ด๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋“ฑ๋ก๋œ ์ปดํฌ๋„ŒํŠธ์— ์ œ๋Œ€๋กœ ์•Œ๋ฆฌ์ง€ ์•Š์€ ์ฑ„ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

atom๊ณผ ์ƒํ˜ธ์ž‘์šฉ ์œ„ํ•ด์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” hooks

  • useRecoilState(): atom ์ฝ๊ธฐ, ์“ฐ๊ธฐ ๊ฐ€๋Šฅ 
  • useRecoilValue(): atom ์ผ๊ธฐ ์ „์šฉ
  • useSetRecoilState(): atom ์“ฐ๊ธฐ ์ „์šฉ
  • useResetRecoilState(): atom ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”

- ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” selector ์‚ฌ์šฉ

 

 

selector

: ํ•จ์ˆ˜๋‚˜ ํŒŒ์ƒ๋œ ์ƒํƒœ

 

- ์ •์  ์˜์กด์„ฑ์ด ์žˆ๋Š” Selector

const mySelector = selector({
  key: 'MySelector',
  get: ({get}) => get(myAtom) * 100,
});

 

- ๋™์  ์˜์กด์„ฑ์ด ์žˆ๋Š” Selector

const toggleState = atom({key: 'Toggle', default: false});

const mySelector = selector({
  key: 'MySelector',
  get: ({get}) => {
    const toggle = get(toggleState);
    if (toggle) {
      return get(selectorA);
    } else {
      return get(selectorB);
    }
  },
});

 

๐Ÿ’ญ๋ฐฐ์šด ์ 

 

๋ฆฌ์ฝ”์ผ์„ ์ผ๋‹จ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด์„œ ์ด๋ก ์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๊ทธ๋ƒฅ ๋‚ด์šฉ๋งŒ ์ฝ๊ณ ์žˆ๋‹ค๋ณด๋‹ˆ ๋‚ด๊ฐ€ ์ด๊ฑธ ์ฝ”๋“œ๋กœ ์น  ์ˆ˜ ์žˆ์„๊นŒ? ํ•˜๋Š” ๊ฑฑ์ •์ด ๋“ ๋‹ค. ์ฝ”๋“œ๋กœ ์น˜๋ฉด์„œ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ์€๋ฐ ... ๊ฐ„๋‹จํ•˜๊ฒŒ todo๋ผ๋„ ์‹ค์Šตํ•ด๋ด์•ผํ•˜๋‚˜ ์‹ถ๋‹ค. todo ์‹ค์Šต์ด ๊ณต์‹๋ฌธ์„œ์— ์žˆ๊ธฐ๋„ ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๋ฃจ ์ •๋„๋ฉด ๋๋‚ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

์ฝ๊ณ  ์žˆ์—ˆ๋˜ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋„ ๋ด์•ผํ•˜๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต์‹๋ฌธ์„œ๋„ ๋ด์•ผํ•œ๋‹ค! ์ง€๊ธˆ๊นŒ์ง€ ์•Œ๊ณ  ์žˆ๋˜ ์ง€์‹๋“ค์„ ์ข€ ๋” ์ •์ œํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๋”ฅ๋‹ค์ด๋ธŒ ์ฝ๋Š” ๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€! 

ํ•  ์ผ์€ ๋Š˜์–ด๋‚˜๋Š”๋ฐ ์™œ์ด๋ฆฌ ๋Š˜์–ด์ง€๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค!! ์‰ฌ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ๋นก๊ณตํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ ...?