diff --git a/package-lock.json b/package-lock.json index b4904ee..4053aec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "store-client", "version": "0.0.0", "dependencies": { + "immer": "^11.1.8", "react": "^19.1.0", "react-dom": "^19.1.0" }, @@ -2054,6 +2055,16 @@ "node": ">= 4" } }, + "node_modules/immer": { + "version": "11.1.8", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.8.tgz", + "integrity": "sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", diff --git a/package.json b/package.json index 151176e..46f4b06 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,13 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite", "build": "vite build", "lint": "eslint .", "preview": "vite preview" }, "dependencies": { + "immer": "^11.1.8", "react": "^19.1.0", "react-dom": "^19.1.0" }, diff --git a/src/App.jsx b/src/App.jsx index 6bf3ac6..390d943 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,10 +1,49 @@ -// удаляем все, оставляя лишь пустую функцию App ниже +import React, { useState, useEffect } from 'react' +import { produce } from 'immer' function App() { + const [tasks,setTasks] = useState([]) + const [input,setInput] = useState('') + + const addTask = () => { + if(!input.trim()) return + + setTasks(currentTasks => produce(currentTasks, draft => { + draft.push({ + id: Date.now(), + text: input.trim(), + done: false + }) + })) + setInput('') + } + const toggleTask = id => { + setTasks(currentTask => produce(currentTask, draft => { + const task = draft.find(t => t.id === id) + if(task) { + task.done = !task.done + } + })) + } + const removeTask = id => { + setTasks(currentTask => produce(currentTask, draft => { + const index = draft.findIndex(t => t.id === id) + if (index !== -1) + draft.splice(index,1) + })) + } return ( <> - {/* Добавьте тестовый контент для проверки */} -