간단하고 직관적인 상태 관리 라이브러리
npm install zustand
현재는 로컬 상태로 구현되어 있습니다. 패키지 설치 후 코드 주석을 해제하세요.
할 일이 없습니다
// Zustand Store 정의
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
interface TodoStore {
todos: Todo[];
addTodo: (text: string) => void;
toggleTodo: (id: number) => void;
removeTodo: (id: number) => void;
}
const useTodoStore = create<TodoStore>()(
devtools(
persist(
(set) => ({
todos: [],
addTodo: (text) =>
set((state) => ({
todos: [...state.todos,
{ id: Date.now(), text, completed: false }
],
})),
toggleTodo: (id) =>
set((state) => ({
todos: state.todos.map((todo) =>
todo.id === id
? { ...todo, completed: !todo.completed }
: todo
),
})),
removeTodo: (id) =>
set((state) => ({
todos: state.todos.filter((todo) => todo.id !== id),
})),
}),
{ name: 'zustand-todos' }
)
)
);
// 컴포넌트에서 사용
function TodoList() {
const { todos, addTodo, toggleTodo } = useTodoStore();
return (
<div>
{todos.map(todo => (
<div key={todo.id}>
<input
type="checkbox"
checked={todo.completed}
onChange={() => toggleTodo(todo.id)}
/>
{todo.text}
</div>
))}
</div>
);
}