22 lines
744 B
Plaintext
22 lines
744 B
Plaintext
|
|
```tsx
|
||
|
|
// src/context/TodoContext.tsx
|
||
|
|
import React, { createContext, useContext, useReducer } from 'react';
|
||
|
|
|
||
|
|
type Todo = { id: string; text: string; completed: boolean; };
|
||
|
|
|
||
|
|
type TodoState = { todos: Todo[]; };
|
||
|
|
type TodoAction =
|
||
|
|
| { type: 'ADD_TODO'; payload: string }
|
||
|
|
| { type: 'TOGGLE_TODO'; payload: string }
|
||
|
|
| { type: 'DELETE_TODO'; payload: string };
|
||
|
|
|
||
|
|
const TodoContext = createContext<{
|
||
|
|
state: TodoState;
|
||
|
|
dispatch: React.Dispatch<TodoAction>;
|
||
|
|
} | undefined>(undefined);
|
||
|
|
|
||
|
|
export const TodoProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
||
|
|
const [state, dispatch] = useReducer(todoReducer, { todos: [] });
|
||
|
|
return <TodoContext.Provider value={{ state, dispatch }}>{children}</TodoContext.Provider>;
|
||
|
|
};
|
||
|
|
```
|