- ๋ฆฌ์กํธ์์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธ ํด์ผ ํ ๋์๋ ๋ถ๋ณ์ฑ์ ์ง์ผ์ผ ํจ
- immer ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๋ฉด ๊น๋ํ๊ฒ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
- immer๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ ๋, ๋ถ๋ณ์ฑ์ ์ ๊ฒฝ์ฐ์ง ์์ผ๋ฉด์ ์ ๋ฐ์ดํธ๋ฅผ ํด์ฃผ๋ฉด Immer๊ฐ ๋ถ๋ณ์ฑ ๊ด๋ฆฌ ๋์ ํด์ค
Immer ์ฌ์ฉ๋ฒ
- Immer ์ค์น
- $ yarn add immer
- ์ฝ๋ ์๋จ์ Immer ๋ถ๋ฌ์ด → ๋ณดํต produce์ด๋ฆ์ผ๋ก ๋ถ๋ฌ์ด
- import produce form ‘immer’;
- produce ํจ์ ์ฌ์ฉ
- ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ์์ ํ๊ณ ์ถ์ ์ํ
- ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ์ด๋ป๊ฒ ์ ๋ฐ์ดํธํ๊ณ ์ถ์์ง ์ ์ํ๋ ํจ์(๋ถ๋ณ์ฑ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๊ทธ๋ฅ ์ ๋ฐ์ดํธํ๋ฉด ์์์ ํด์ค)
const state={
number:1,
dontChangeMe: 2
};
const nextState = produce(state, draft => {
draft.number+=1;
});
console.log(nextState);
//{number:2, dontChangeMe:2 }
Immer์ ํจ์ํ ์ ๋ฐ์ดํธ
const [todo, setTodo] = useState({
text: 'Hello',
done: false
});
const onClick = useCallback(() => {
setTodo(todo => ({
...todo,
done: !todo.done
}));
}, []);
→ useState์ useCallback์ผ๋ก ํจ์ ์ ๋ฐ์ดํธ
Immer ์ฌ์ฉํ์ฌ ํจ์ํ ์ ๋ฐ์ดํธ
produce ํจ์์์
- ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ๋ฃ์ ์ํ๋ฅผ ๋ถ๋ณ์ฑ ์ ์งํ๋ฉด ์๋ก์ด ์ํ ๋ง๋ค์ด ์ค
- ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ ์๋ตํ๊ณ ๋ฐ๋ก ์ ๋ฐ์ดํธ ํจ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฐํ ๊ฐ์ ์๋ก์ด ์ํ๊ฐ ์๋ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ํจ์๊ฐ ๋จ
const todo = {
text: 'Hello',
done: false
};
const updater = produce(draft = > {
draft.done = !draft.done;
});
const nextTodo = updater(todo);
console.log(nextTodo);'ํ๋ก ํธ์๋ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| LifeCycle Method (0) | 2022.12.02 |
|---|---|
| ํด๋์คํ ์ปดํฌ๋ํธ (0) | 2022.12.02 |
| Context API (0) | 2022.11.24 |
| ์ปค์คํ Hooks ๋ง๋ค๊ธฐ (0) | 2022.11.24 |
| useReducer (0) | 2022.11.24 |