반응형
임머가 뭐야?
이머의 작동 방식
//Syntax for using Immer
updatePerson(draft => {
draft.places.city = 'Lagos';
});
생산물 사용
상태를 임머로 바꾸기
usState + Imper:
import React, { useCallback, useState } from "react";
import produce from "immer";
const TodoList = () => {
const [todos, setTodos] = useState([
{
id: "React",
title: "Learn React",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]);
const handleToggle = useCallback((id) => {
setTodos(
produce((draft) => {
const todo = draft.find((todo) => todo.id === id);
todo.done = !todo.done;
})
);
}, []);
const handleAdd = useCallback(() => {
setTodos(
produce((draft) => {
draft.push({
id: "todo_" + Math.random(),
title: "A new todo",
done: false
});
})
);
}, []);
return (<div>{* List of Todo */}</div>)
}
Imer 사용
import React, { useCallback } from "react";
import { useImmer } from "use-immer";
const TodoList = () => {
const [todos, setTodos] = useImmer([
{
id: "React",
title: "Learn React",
done: true
},
{
id: "Immer",
title: "Try Immer",
done: false
}
]);
const handleToggle = useCallback((id) => {
setTodos((draft) => {
const todo = draft.find((todo) => todo.id === id);
todo.done = !todo.done;
});
}, []);
const handleAdd = useCallback(() => {
setTodos((draft) => {
draft.push({
id: "todo_" + Math.random(),
title: "A new todo",
done: false
});
});
}, []);
리듀서와 함께 이머 사용
useReducer + Immer
import React, {useCallback, useReducer} from "react"
import produce from "immer"
const TodoList = () => {
const [todos, dispatch] = useReducer(
produce((draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find(todo => todo.id === action.id)
todo.done = !todo.done
break
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
})
break
default:
break
}
}),
[
/* initial todos */
]
)
const handleToggle = useCallback(id => {
dispatch({
type: "toggle",
id
})
}, [])
const handleAdd = useCallback(() => {
dispatch({
type: "add",
id: "todo_" + Math.random()
})
}, [])
}
ImerReducer 사용
import React, { useCallback } from "react";
import { useImmerReducer } from "use-immer";
const TodoList = () => {
const [todos, dispatch] = useImmerReducer(
(draft, action) => {
switch (action.type) {
case "toggle":
const todo = draft.find((todo) => todo.id === action.id);
todo.done = !todo.done;
break;
case "add":
draft.push({
id: action.id,
title: "A new todo",
done: false
});
break;
default:
break;
}
},
[ /* initial todos */ ]
);
결론
독립적인 구성 요소를 사용하여 10배 이상의 개발 실현
'프로그래밍' 카테고리의 다른 글
파이썬의 11가지 놀라운 목록 방법 (0) | 2022.02.15 |
---|---|
보이지 않는 악성 앱을 원격으로 설치하여 업데이트로 작동 (0) | 2022.02.15 |
JavaScript를 배우기 위한 최고의 YouTube 채널 (0) | 2022.02.15 |
직원들이 원하는 건 다 줬어요 그들은 옆구리를 치고 떠났다. (0) | 2022.02.15 |
내 상사가 잘못된 프로젝트 일정 추정으로 프로그래머를 해고하는 8가지 이유 (0) | 2022.02.15 |
댓글