Advertisement
Guest User

Untitled

a guest
Oct 4th, 2020
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {useCallback, useMemo, useState} from 'react';
  2. import Todo from "./components/Todo";
  3.  
  4. function App() {
  5.     const [tasks, setTasks] = useState(JSON.parse(localStorage.getItem('tasks')) || {
  6.         tasks: [],
  7.         error: false
  8.     });
  9.     const done = useMemo(() => tasks.tasks.filter(e => e.done).length, [tasks]);
  10.  
  11.     function onSubmit(e) {
  12.         e.preventDefault();
  13.         if (e.target.children[0].value.length <= 3) {
  14.             setTasks({
  15.                 tasks: tasks.tasks,
  16.                 error: true
  17.             });
  18.             return;
  19.         }
  20.  
  21.         setTasks({
  22.             tasks: [...tasks.tasks, {
  23.                 id: tasks.tasks.length,
  24.                 text: e.target.children[0].value,
  25.                 done: false
  26.             }],
  27.             error: false
  28.         });
  29.         e.target.children[0].value = '';
  30.     }
  31.  
  32.     function onClick(task) {
  33.         setTasks({
  34.             tasks: tasks.tasks.map(e => {
  35.                 return Object.assign(e, {done: e.id === task.id ? !e.done : e.done});
  36.             }),
  37.             error: tasks.error
  38.         });
  39.     }
  40.  
  41.     function onDelete(task) {
  42.         setTasks({
  43.             tasks: tasks.tasks.filter(e => e.id !== task.id),
  44.             error: tasks.error
  45.         });
  46.         localStorage.setItem('tasks', JSON.stringify(tasks)); // Короче, это только при onDelete должно выполняться.
  47.     }
  48.  
  49.     return (
  50.         <div className="container">
  51.             <h1>To-do</h1>
  52.             <Todo onDelete={onDelete} onSubmit={onSubmit} tasks={Object.assign(tasks, {done})} onClick={onClick}/>
  53.         </div>
  54.     )
  55. }
  56.  
  57. export default App;
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement