Задача

Найти и исправить ошибки в компоненте. Он показывает список задач, позволяет добавлять новые и фильтровать выполненные.

function TodoList({ todos }) {
    const [items, setItems] = useState(todos);
    const [text, setText] = useState('');
 
    // добавить задачу
    const addTodo = () => {
        items.push({ id: Date.now(), title: text, done: false });
        setItems(items);
        setText('');
    };
 
    // переключить выполнение
    const toggle = (i) => {
        items[i].done = !items[i].done;
        setItems(items);
    };
 
    const visible = items.filter((t) => !t.done);
 
    const stats = () => {
        return { total: items.length, left: visible.length };
    };
 
    return (
        <div>
            <input value={text} onChange={(e) => setText(e.target.value)} />
            <button onClick={addTodo}>Add</button>
 
            <p>Left: {stats().left} / {stats().total}</p>
 
            {visible.map((todo, i) => (
                <div key={i} onClick={() => toggle(i)}>
                    {todo.title}
                </div>
            ))}
        </div>
    );
}

Разбор ошибок

Решение