Guest User

Untitled

a guest
Oct 4th, 2020
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {useCallback, useEffect, 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.     const 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: Math.max(...tasks.tasks.map(e => e.id), 0) + 1,
  24.                 text: e.target.children[0].value,
  25.                 done: false
  26.             }],
  27.             error: false
  28.         });
  29.         e.target.children[0].value = '';
  30.     }
  31.  
  32.     const onClick = useCallback((task) => setTasks({
  33.         tasks: tasks.tasks.map(e => Object.assign(e, {done: e.id === task.id ? !e.done : e.done})),
  34.         error: tasks.error
  35.     }), [tasks]);
  36.  
  37.     const onDelete = useCallback((task) => {
  38.         setTasks({
  39.             tasks: tasks.tasks.filter(e => e.id !== task.id),
  40.             error: tasks.error
  41.         });
  42.         localStorage.setItem('tasks', JSON.stringify(tasks)); // НЕ БУДЕТ РАБОТАТЬ, т.к. ЭТО СИНХ ФУНКЦИЯ ПОСЛЕ АСИНХ
  43.     }, [tasks]);
  44.  
  45.     return (
  46.         <div className="container">
  47.             <h1>To-do</h1>
  48.             <Todo onDelete={onDelete} onSubmit={onSubmit} tasks={Object.assign(tasks, {done})} onClick={onClick}/>
  49.         </div>
  50.     )
  51. }
  52.  
  53. export default App;
  54.  
Advertisement
Add Comment
Please, Sign In to add comment