React ํ๋ก์ ํธ ์ค ํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ์ ์ ๋ณด๋ฅผ Recoil Atom์ ์ฌ์ฉํด ์ ์ญ์ผ๋ก ์ ์ฅํ๋ค.
props๋ฅผ ํตํด ์ ์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ์ง ์์๋ Atom์ ์ ๊ทผํ์ฌ ๋ชจ๋ ํ์ด์ง์์ ์ ์ ์ ๋ณด ๊ฐ์ ธ์ฌ ์ ์์์๐๐ป
๊ทธ๋ฌ๋... ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๊ฒ๋๋ฉด Recoil Atom์ด ์ด๊ธฐํ๋์ด ์ ์ฅ๋ ์ ์ ์ ๋ณด๊ฐ ํ๋ฐ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๐ (์ด๋ Recoil Atom์ด ๋ธ๋ผ์ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํจ)
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ์ฅํ ์ํ๋ฅผ ์ง์ํ๊ธฐ ์ํด Recoil-persist
๋ฅผ ์ฌ์ฉํด๋ดโ๐ป
1. recoil-persist ์ค์น, ์ฌ์ฉํ ํ์ผ์์ import
npm install recoil-persist
import { recoilPersist } from 'recoil-persist'
2. ์ต์ ์ค์
localStorage
or sessionStorage
)const { persistAtom } = recoilPersist({
key: 'persist-atom-key',
storage: localStorage,
})
3. ์ํ๋ atom์ ์ต์ ์ถ๊ฐ
effects_UNSTABLE: [์ค์ ํ ์ต์
๋ช
]
์ถ๊ฐexport const ExAtom = atom({
key: 'ExAtom',
default: 0,
effects_UNSTABLE: [persistAtom],
});
import { atom } from 'recoil';
export const UserAtom = atom({
key: 'UserAtom',
default: { id: '', password: '' },
});
๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋
๋ฒํผ ๋๋ฅด๋ฉด Page2.jsx
๋ก ์ด๋import { useRecoilState } from 'recoil';
import { UserAtom } from './recoil/UserAtom';
import { useNavigate } from 'react-router-dom';
export default function Page1() {
const navigate = useNavigate();
const [userInfo, setUserInfo] = useRecoilState(UserAtom);
const handleIdInput = (event) => {
setUserInfo({ ...userInfo, id: event.target.value });
};
const handlePassWordInput = (event) => {
setUserInfo({ ...userInfo, password: event.target.value });
};
const handleSubmit = (event) => {
event.preventDefault();
navigate('/page2');
};
return (
<>
<h1>ํ์ด์ง1</h1>
<label htmlFor='id'>์์ด๋</label>
<input type='text' id='id' value={userInfo.id} onChange={handleIdInput} />
<label htmlFor='password'>๋น๋ฐ๋ฒํธ</label>
<input
type='password'
id='password'
value={userInfo.password}
onChange={handlePassWordInput}
/>
<button type='submit' onClick={handleSubmit}>
๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋
</button>
</>
);
}
import { useRecoilValue } from 'recoil';
import { UserAtom } from './recoil/UserAtom';
export default function Page2() {
const userInfo = useRecoilValue(UserAtom);
console.log(userInfo);
return (
<>
<h1>ํ์ด์ง2</h1>
<strong>recoil์ ์ ์ฅ๋ id: </strong>
<span>{userInfo.id}</span>
<strong>recoil์ ์ ์ฅ๋ password: </strong>
<span>{userInfo.password}</span>
</>
);
}
import { atom } from 'recoil';
import { recoilPersist } from 'recoil-persist';
const { persistAtom } = recoilPersist({
key: 'user',
storage: localStorage,
});
export const UserAtom = atom({
key: 'UserAtom',
default: { id: '', password: '' },
effects_UNSTABLE: [persistAtom],
});
๋ง์ด ์ฌ์ฉํ๋ ์ ์ ์ ๋ณด ์ ์ฅ์ ์์๋ก ์ค๋ช ํด์ฃผ์ ์ ์ดํดํ๊ธฐ ์ฌ์ ์ต๋๋ค ๊ธ ์ ์ฝ์์ด์!! ใ ใ