2021. 11. 28. 16:25ใWEB Dev/Javascript | REACT | Node.js
๐ท ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Recoil
A state management library for React
ํฌ๋๋ฉ์ดํธ ํด๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์๋ ๊ณต๋ถํ๊ฒ ๋์๋ค.
๋ฆฌ์กํธ ๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ ํ์๋ก ์ฌ์ฉํด์ผ ํ๋ค๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ์ค์์
๊ฐ์ฅ ์ ๋ช ํ๊ฑด ์ญ์ Redux์ง๋ง
Redux๊ฐ ํฐ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ๊ธฐ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฌด๊ฒ๋ค๋ ํ์ด ์์ด์ ์์ ํ๋ก์ ํธ์ธ ์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ Recoil์ ์ฐ๋ ๊ฒ์ ์ถ์ฒํด์ฃผ์ จ๋ค.
๋ฆฌ์กํธ๋ฅผ ๋ง๋ ํ์ด์ค๋ถํ์ด ๋ง๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์ผ๋ก์ ๋์ธ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์์ง ๋ฆฌ์ฝ์ผ์ ๋ํ ๊ธ์ด ๋ง์ด ์์ด์ ์ ํ๋ธ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ์ํ๊ด๋ฆฌ์ ๋ํ ์ ์์ Recoil ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
์ํ๊ด๋ฆฌ๋ ์ฒ์์ธ๋ฐ ์๋ฃ๊ฐ ๊ณต์ ๋ฌธ์ ๋ฐ์ ์์ด์ ๋จ๋ฆฌ๋ ๋ง์.. (์์ด๋ฅผ ์กฐ๊ธ๋ง ๋ ์ํ์ด๋ ๐ข)
๐ธ ์ํ๊ด๋ฆฌState-management๋?
โช ์ํ
์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ ๋ฐฉ์์ ์ค๋ช ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ํState ๋ผ๊ณ ํ๋ค.
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฐฉ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ํ๊ด๋ฆฌState-management๋ผ๊ณ ํ๋ค.
โช ์ํ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ์ต์ด ๊ฐ Initial Value๋ฅผ ์ ์ฅ
- ํ์ฌ ๊ฐ Current Value๋ฅผ ์ฝ๊ธฐ
- Value ๊ฐ์ ์ ๋ฐ์ดํธ
๐ธ Recoil
Recoil์ ๋ฆฌ์กํธ์ ๋ด์ฅ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ(useState, useContext, Context API)์ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ณ
์ต๋ํ React์ค๋ฌ์ด API๋ฅผ ์ ์งํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ๊ธฐ ์ํ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex : Redux์ Saga, Toolkit ๋ฑ)๋ฅผ ์ต์ํ ํ๋ ์ฅ์ ์ด ์๋ค.
(Redux์ฒ๋ผ React-redux์ฒ๋ผ ๋ค๋ฆฌ๊ฐ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์์์ด Recoil๊ณผ ๋ฆฌ์กํธ๊ฐ ์ฐ๊ฒฐ๋๋ค.)
๐ธ Recoil์ ์ฒ ํ
- ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๊ฐ ์ ์ API
- ๋ฆฌ์กํธ์ ๋ก์ปฌ ์ํ ๊ด๋ฆฌ ์์คํ (useState, useReducer)๊ณผ ์ ์ฌํ ์ธํฐํ์ด์ค
- selector๋ฅผ ์ด์ฉํด ํ์๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํจ์ผ๋ก ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ฌ์ฉํ ์ปดํฌ๋ํธ์์ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋ ๋ก์ง์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- ์ฝ๋ ์ํธ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค.
- ์ ์ฐํ๊ฒ ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ธ Recoil์ ๊ธฐ๋ฅ
โช Atom ์ํฐ
- ์ํฐ์ ์ํ (โ state, props) ์ด๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๊ธฐ๋ณธ ๋จ์๋ฅผ ๋งํ๋ค.
- ์ํฐ์ Redux์ store์ ์ํ์ฒ๋ผ ๊ตฌ๋ ๊ฐ๋ฅํ๋ค.
- ์ํฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ํฐ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํฌ๋ํธ๋ค์ด ์ฌ๋ ๋๋ง ๋๋ฉด์ ๋ณ๊ฒฝ๋ ์ํฐ์ ๊ณต์ ํ๋ค.
- ์ํฐ์ ๊ณ ์ ํ key์ default๋ฅผ ๊ฐ์ง๋ค.
- ๊ณ ์ ํ ํค๋ฅผ ๊ฐ์ง๊ณ ์ปดํฌ๋ํธ์์ ์ํฐ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ค์ ํ default๋ ์ํ์ ์ด๊น๊ฐ initial value๊ฐ ๋๋ค.
โจ ์ํฐ์ state, props ๊ฐ์ ์ํ๋ค.
โจ ์ํฐ์ ์ด๊น๊ฐ์ default๋ค.
โจ ์ํฐ์ key๋ก ๋ถ๋ฌ ์ฌ์ฉํ ์ ์๋ค.
โช selector
- ์ ๋ ํฐ๋ ์ํฐ๊ณผ ์ ๋ ํฐ๋ค์ ์กฐํฉํ ์ ์๋ค.
- ์ ๋ ํฐ๋ฅผ ์ด์ฉํด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด ์ค ์ ์๋ค. (ํ์๋๋ ์ํDerived state๋ฅผ ์์ฑํ๋ค.)
- ์ ๋ ํฐ๋ ๊ณ ์ ํ key๋ฅผ ๊ฐ๋๋ค.
- ์ ๋ ํฐ๊ฐ ์ฐธ์กฐํ ์ํฐ์ด๋ ์ ๋ ํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ๋ ๊ฐ์ ์ฆ์ ๋ฐ์ ์ ์๊ณ , ์ด๊ฒ๋ค์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ ์ฌ๋ ๋๋ง ๋๋ค.
- ์ ๋ ํฐ๋ก async๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ์์ ์ด ๊ฐ๋ฅํ๋ค. (์๋ฒ์์ api๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค)
- ์ ๋ ํฐ๋ก ๋ถ๋ฅธ return ๊ฐ์ useRecoilValue(์ ๋ ํฐkey)๋ฅผ ํตํด ๋ฐ์์ฌ ์ ์๋ค.
- ์ ๋ ํฐ์ return ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉ์ด๋ค.
โช useRecoilState
- useRecoilState๋ useState ํ ๊ณผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๋์ผํ๋ค ๐
- let [์ํ, ์ํ๋ณ๊ฒฝํจ์] = useState(์ด๊น๊ฐ);
- let [์ํ, ์ํ๋ณ๊ฒฝํจ์] = useRecoilState(key);
- useRecoilState์ ์ฌ์ฉํ ์ํฐ์ ์ํ๋ ์๋์ผ๋ก ์ํ๊ฐ ๊ณต์ ๋๊ณ ์ ์ญ์ผ๋ก ๊ณต์ ๋๋ค.
โช useRecoilValue
- useRecoilValue๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์ ์์ด ์ํฐ์ ๊ฐ๋ง ๋ฐ๋๋ค.
โช useRecoilCallback
- ๋ฆฌ์กํธ์ useCallback๊ณผ ์ ์ฌํ๊ณ , ๋ฆฌ์ฝ์ผ State๋ฅผ ์ฌ์ฉํ ์ ์๋ API๋ฅผ ์ ๊ณตํ๋ค.
- ์ํฐ์ด๋ ์ ๋ ํฐ๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด ์ด๋ค์ ์ฐธ์กฐํ๊ณ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ ๋๋งํ๋ค.
- ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋น๋๊ธฐ์ ์ก์ ์ ์ํํ ์ ์๋ค.
๋์๋ฐ์ ์๋ฃ ๐
- ์ Recoil์ ์จ์ผ ํ๋๊ฐ? -์นํฐFE
- ๋ฆฌ์ฝ์ผ(Recoil)์ ์ ๋ง๋ ๊ฑด๋ฐ? -wooder2050
'WEB Dev > Javascript | REACT | Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์นด์นด์ค ๊ณ์ ๋ก๊ทธ์ธ ์ฐ๊ฒฐํ๊ธฐ ํ ์คํธ (0) | 2022.01.19 |
---|---|
[Javascript] ์ ๊ท์์ผ๋ก ํ๊ทธ ์ ๊ฑฐํ๊ธฐ (0) | 2022.01.06 |
[Javascript] sessionStorage ์ฌ์ฉํ๊ธฐ (setItem, getItem) (0) | 2021.12.30 |
[React] useState ์ฌ์ฉํ๊ธฐ (0) | 2021.12.26 |
[Javascript] ๊ฐ๋จํ ๋งํฌ ์ฃผ์ ๋ณต์ฌ ๋ฒํผ ๋ง๋ค๊ธฐ (0) | 2021.12.22 |