개발/🟦 React

🟦[React] Todo List 짜보기

비니_ 2025. 6. 7. 16:57
728x90

Todo List 짜보기

 

useImmer, filter 사용

import { useEffect } from "react";
import { useImmer } from "use-immer";

export default function TodoList(){
    const [todos, setTodos] = useImmer([
        { id: 1, text: '공부'},
        { id: 2, text: '운동'},
        { id: 3, text: '청소'},
    ]);
    const [inputText, setInputText] = useImmer('');

    function handleAdd(text){
        const lastId = todos.length > 0
            ? Math.max(...todos.map(todo => todo.id))
            : 0;

        setTodos(draft => {
            draft.push({
                id: lastId + 1,
                text
            });
        });

        setInputText('');
    }

    function handleDelete(id){
        setTodos(prevTodos => prevTodos.filter(todo => todo.id !== id));
    }

    useEffect(() => {
        console.log(todos);
    }, [todos]);

    return(
        <>
            <h2>Todo List</h2>
            <div>
                <input
                    type="text"
                    placeholder="할 일 입력"
                    value={inputText}
                    onChange={(e) => setInputText(e.target.value)}
                />
                <button onClick={() => handleAdd(inputText)}>추가</button>
            </div>
            <ul>
                {todos.map(data => (
                    <li key ={data.id}>
                        {data.text}
                        <button onClick={() => handleDelete(data.id)}>삭제</button>
                    </li>
                ))}
            </ul>
        </>
    )
};
728x90