โœ๏ธ What I Learned/TIL

[TIL] Recoil Selector

Jiwon() 2023. 10. 29. 21:44

๐Ÿ’ก TIL 20231029 - Recoil Selector


Selector๋ž€?

  • Derived state
    • ์ž…๋ ฅ๋ฐ›์€ state๋ฅผ ๋ณ€ํ˜•ํ•ด ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ๋ฐ˜ํ™˜๋œ ๊ฐ’
    • Selector๋Š” ํŒŒ์ƒ๋œ state(derived state)์˜ ์ผ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ๊ธฐ์กด state๋ฅผ ๊ฐ€์ ธ์™€์„œ, ๊ธฐ์กด state๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด state๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด state๋ฅผ ์ด์šฉ๋งŒํ•  ๋ฟ ๋ณ€ํ˜•์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. derived state๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์— ์˜์กดํ•˜๋Š” ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•๋ ฅํ•œ ๊ฐœ๋…์ด๋‹ค.
  • atom์˜ output์„ ๋ณ€ํ˜•์‹œ์ผœ ์ฃผ๋Š” ๊ฐœ๋…
  • To Do ๋ชฉ๋ก๋“ค์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?
    • ์ปดํฌ๋„ŒํŠธ ์ž์ฒด์—์„œ ์ „์ฒด To Dos ๋ฐฐ์—ด์„ ๋ถˆ๋Ÿฌ์˜จ ๋’ค ๋ถ„๋ฅ˜ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ์€ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ์ง€๋Š” ์•Š๋Š”๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•  ๋ฟ
    • ํ•œ ๊ณณ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฐ์•„๋†“๊ณ  ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๊ทธ๊ฑธ ์ˆ˜์ •ํ•ด์„œ ๋ Œ๋”๋งํ•˜๋Š” ๋Œ€์‹ , atom์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„๋‘๊ณ  selector๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜๋ ค๋Š” ๊ฒƒ

Selector์˜ ์š”์†Œ๋“ค

const userNameSelector = selector({
  key : 'userName',
  get : ({ get }) => {
    const user = get(userState);
    return `${user.firstName} ${user.lastName}`
  },
  set : ({ set }, name) => {
    const names = name.split(' ');
    set(
      userState,
      (prevState) => ({
        ...prevState,
        firstName : names[0],
        lastName : names[1] || ''
      })
    )
  }
})

key

  • atom์˜ key์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ selector์˜ ๊ณ ์œ ๊ฐ’

 

get

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ํ•จ์ˆ˜
  • ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฐ์ฒด ์•ˆ์˜ get์„ ํ†ตํ•ด atom์ด๋‚˜ ๋‹ค๋ฅธ selector์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋•Œ ์ž๋™์œผ๋กœ ์ข…์†๊ด€๊ณ„๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ ‘๊ทผํ•œ atom ๋˜๋Š” selector๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ์ด ํ•จ์ˆ˜๋„ ๋‹ค์‹œ ์‹คํ–‰๋œ๋‹ค.

 

set

  • ์ด ์†์„ฑ์€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ, set ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น selector๋Š” writable RecoilState ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ฐ์ฒด(get, set, reset์„ ํฌํ•จ), ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ธ์ž ๊ฐ์ฒด ์•ˆ์— ์žˆ๋Š” set์œผ๋กœ ๋‹ค๋ฅธ atom ๊ฐ’์„ setํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

Recoil ์ •๋ฆฌํ•˜๊ธฐ