๐ก 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ํ ์ ์๋ค.
์ฐธ๊ณ ์ฌ์ดํธ