We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
๊ณต์๋ฌธ์์์์ atom์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. atoms (๊ณต์ ์ํ) ์ ๊ธฐ์กด์ redux์์ ์ฐ์ด๋ store ์ ์ ์ฌํ ๊ฐ๋ ์ ๋๋ค.
atom์ด ์ ๋ฐ์ดํธ ๋๋ฉด, ํด๋น atom์ ๊ตฌ๋ ํ๊ณ ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ state๊ฐ ์๋ก์ด ๊ฐ์ผ๋ก ๋ฆฌ๋ ๋ ๋๋ค !
unique ํ id์ธ key๋ก ๊ตฌ๋ถ๋๋ ๊ฐ atom์, ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ atom์ ๊ตฌ๋ ํ๊ณ ์๋ค๋ฉด ๊ทธ ์ปดํฌ๋ํธ๋ค๋ ๋๊ฐ์ ์ํ๋ฅผ ๊ณต์ ํฉ๋๋คโจ (์ํ๊ฐ ๋ฐ๋๋ฉด ๋ฐ๋ ๊ฐ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๋ค์ด re-render )
๐ ์์ธํ ์ค๋ช ์ ์ฌ๊ธฐ์! [Recoil] Recoil 200% ํ์ฉํ๊ธฐ
์ฐ๋ฆฌ๋ ๊ธฐ๋ฅ์ด ๋ฉ์ด์ปค์ ํ๋ ์ด์ด๋ก ๋๋์ด ์๊ธฐ์ recoil ํด๋ ์์ maker, player ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ์์์ ๋ค์ atom, selector ํ์ผ์ ๋ง๋ค์ด ๋์์ต๋๋ค.
maker, player
atom, selector
RecoilRoot๋ ๋ฆฌ๋์ค์ Provier์ ๋น์ทํ ์ญํ ์ ์ํํ๊ณ , ์ฌ๋ฌ๊ฐ์ RecoilRoot๊ฐ ๊ณต์กดํ ์ ์์ ๋ฟ๋ง ์๋๋ผ atom state์ ๋ ๋ฆฝ์ ์ธ ๊ณต๊ธ์ / ์ ์ฅ์๋ฅผ ๋ํ๋ด๋ ์ญํ ์ ํ๋ค!
๊ณต๊ธ์ / ์ ์ฅ์
const Router = () => ( <BrowserRouter> <RecoilRoot> <Routes> <Route path="/" element={<Home />} /> <Route path="/library" element={<Library />} /> <Route path="/login" element={<Login />} /> <Route path="/signup" element={<Signup />} /> <Route path="/playerlanding" element={<PlayerLanding />} /> <Route path="/makerlanding" element={<MakerLanding />} /> <Route path="/voting" element={<Voting />} /> <Route path="*" element={<Error404 />} /> </Routes> </RecoilRoot> </BrowserRouter> );
atom์ ์ํ๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ด์ *์ ์ญ ์ ์ฅ์**๋ฅผ ๋ง๋๋ ๊ณต๊ฐ์ ๋๋ค.
๐ก Tip) api๋ช ์ธ์์ ์ ํ ๋ฐ์ดํฐ ๋ค์ด๋ฐ์ ์ฌ์ฉํด ์ํ๋ช ์ ์ง์ ํด์ฃผ๋ฉด ํท๊ฐ๋ฆฌ์ง ์๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค .
import { atom } from 'recoil'; import { recoilPersist } from 'recoil-persist'; import { VotingInfo } from './../../types/voting'; // โ ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ์ํ๊ด๋ฆฌ๋ฅผ ์ ์ง const { persistAtom } = recoilPersist(); // โ unique ID ๋ฅผ ๊ฐ์ง๊ณ ์ด๊ธฐ ๊ฐ์ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค! export const votingInfoState = atom<VotingInfo>({ key: 'votingInfo', default: { vote_id: 0, user_id: 0, vote_status: false, vote_title: '', pictures: [], current_vote: 0, maximum_vote: 0, created_date: new Date(0), }, effects_UNSTABLE: [persistAtom], });
selector๋ recoil์์ ๊ด๋ฆฌํ๋ ์ํ์ ํน์ ๋ถ๋ถ๋ง ์ ํํ๊ฑฐ๋ ํด๋น ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐํ ๊ฐ์ ์กฐํํฉ๋๋ค. ์ฆ, ๋ค๋ฅธ atom์ ์์กดํ๋ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด ํน์ง์ ๋๋ค. ๋๋ถ์ด ๋์ผํ Parameter๋ฅผ ์ ๊ณตํ๋ฉด ๋์ผํ ๊ฐ์ return ํ๋ ์์ํจ์์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
import { selector } from 'recoil'; import { votingList } from './atom'; export const votingIdStateSelector = selectorFamily<VotingInfo[], number>(({ key: 'votingIdSelector', get: (param : number) => ({ get }) => get(votingList).filter((votingInfo)=> votingInfo.vote_id === number), });
์ฌ์ฉ ๋ฐฉ๋ฒ
// state ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๊ตฌํํ๋ฉด ๋ฉ๋๋ค! const [newVotingInfo, setNewVotingInfo] = useRecoilState(votingStateSelector); // ๐ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ ๋ ํฐ ์ฌ์ฉ๋ฒ // useRecoilValue(votingIdStateSelector(voite_id)); useEffect(() => { if (votingInfo) { setNewVotingInfo(votingInfo.data); } }, []);
๐ผ ์ง๋ฌธ ๋๋ฌด๋๋ฌด ์กฐ์์ ์์์์ ๐ผ
The text was updated successfully, but these errors were encountered:
Happhee
No branches or pull requests
โจ Recoil ์ด๋?
Recoil์ ๊ธฐ๋ณธ, โ๏ธ Atom
๊ณต์๋ฌธ์์์์ atom์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
atoms (๊ณต์ ์ํ) ์ ๊ธฐ์กด์ redux์์ ์ฐ์ด๋ store ์ ์ ์ฌํ ๊ฐ๋ ์ ๋๋ค.
atom์ด ์ ๋ฐ์ดํธ ๋๋ฉด, ํด๋น atom์ ๊ตฌ๋ ํ๊ณ ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ state๊ฐ ์๋ก์ด ๊ฐ์ผ๋ก ๋ฆฌ๋ ๋ ๋๋ค !
unique ํ id์ธ key๋ก ๊ตฌ๋ถ๋๋ ๊ฐ atom์, ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ atom์ ๊ตฌ๋ ํ๊ณ ์๋ค๋ฉด ๊ทธ ์ปดํฌ๋ํธ๋ค๋ ๋๊ฐ์ ์ํ๋ฅผ ๊ณต์ ํฉ๋๋คโจ
(์ํ๊ฐ ๋ฐ๋๋ฉด ๋ฐ๋ ๊ฐ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๋ค์ด re-render )
๐ ์์ธํ ์ค๋ช ์ ์ฌ๊ธฐ์!
[Recoil] Recoil 200% ํ์ฉํ๊ธฐ
โจ Pic.me์ ์ ์ฉํ๊ธฐ!
๐ ํด๋๊ตฌ์กฐ
์ฐ๋ฆฌ๋ ๊ธฐ๋ฅ์ด ๋ฉ์ด์ปค์ ํ๋ ์ด์ด๋ก ๋๋์ด ์๊ธฐ์ recoil ํด๋ ์์
maker, player
ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ์์์ ๋ค์atom, selector
ํ์ผ์ ๋ง๋ค์ด ๋์์ต๋๋ค.โ RecoilRoot
๐ components/Router.tsx
โ atom
atom์ ์ํ๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ด์ *์ ์ญ ์ ์ฅ์**๋ฅผ ๋ง๋๋ ๊ณต๊ฐ์ ๋๋ค.
๐ recoil/player/atom.ts
โ selector
selector๋ recoil์์ ๊ด๋ฆฌํ๋ ์ํ์ ํน์ ๋ถ๋ถ๋ง ์ ํํ๊ฑฐ๋ ํด๋น ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐํ ๊ฐ์ ์กฐํํฉ๋๋ค. ์ฆ, ๋ค๋ฅธ atom์ ์์กดํ๋ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด ํน์ง์ ๋๋ค.
๋๋ถ์ด ๋์ผํ Parameter๋ฅผ ์ ๊ณตํ๋ฉด ๋์ผํ ๊ฐ์ return ํ๋ ์์ํจ์์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๐ recoil/player/selector.ts
โ ์ปดํฌ๋ํธ or ํ์ด์ง์์ ์ฌ์ฉํ๊ธฐ
์ฌ์ฉ ๋ฐฉ๋ฒ
๐ pages/Voting.tsx
๐ Reference
๐ผ ์ง๋ฌธ ๋๋ฌด๋๋ฌด ์กฐ์์ ์์์์ ๐ผ
The text was updated successfully, but these errors were encountered: