728x90
여러 컴포넌트 간 상태 공유
내용:
- Zustand를 사용하여 컴포넌트 간 상태 공유 방법
- 컴포넌트 간 상태 전달 없이 Zustand로 상태 접근
- 상태 관리가 필요한 애플리케이션 구조의 효율성 증대
실습:
- 여러 컴포넌트에서 Zustand 상태를 공유하는 예제 (Todo 리스트 구현)
- 하나의 상태 저장소를 사용해 컴포넌트들이 동일한 Todo 리스트 상태를 관리 및 업데이트
예제 코드:
// store.js
import create from 'zustand';
const useTodoStore = create((set) => ({
todos: [],
addTodo: (todo) => set((state) => ({ todos: [...state.todos, todo] })),
removeTodo: (index) => set((state) => ({
todos: state.todos.filter((_, i) => i !== index)
})),
}));
export default useTodoStore;
// TodoInput.js
import React, { useState } from 'react';
import useTodoStore from './store';
const TodoInput = () => {
const [todo, setTodo] = useState('');
const addTodo = useTodoStore((state) => state.addTodo);
const handleAdd = () => {
if (todo) {
addTodo(todo);
setTodo('');
}
};
return (
<div>
<input value={todo} onChange={(e) => setTodo(e.target.value)} />
<button onClick={handleAdd}>Add Todo</button>
</div>
);
};
export default TodoInput;
// TodoList.js
import React from 'react';
import useTodoStore from './store';
const TodoList = () => {
const todos = useTodoStore((state) => state.todos);
const removeTodo = useTodoStore((state) => state.removeTodo);
return (
<ul>
{todos.map((todo, index) => (
<li key={index}>
{todo}
<button onClick={() => removeTodo(index)}>Remove</button>
</li>
))}
</ul>
);
};
export default TodoList;
// App.js
import React from 'react';
import TodoInput from './TodoInput';
import TodoList from './TodoList';
function App() {
return (
<div>
<h1>Todo List</h1>
<TodoInput />
<TodoList />
</div>
);
}
export default App;
728x90
'React > Zustand' 카테고리의 다른 글
Zustand를 활용(5): 상태 리팩토링 및 모듈화 (2) | 2024.10.15 |
---|---|
Zustand를 활용(4): 여러 컴포넌트 간 상태 공유 (0) | 2024.10.15 |
Zustand를 활용(2): Zustand에서 상태 관리의 기본 원리 (0) | 2024.10.15 |
Zustand를 활용(1): Zustand 개요 및 설치 (0) | 2024.10.15 |
Zustand를 활용한 효율적인 React 상태 관리(feat. React) (0) | 2024.10.15 |