HOW TO DO THIS IN REACT?
Clicking on a TODO card should mark the TODO as complete and move it to the
bottom of the list.
import React, { useEffect, useState } from "react";
import "./App.css";
import TodoForm from "./components/TodoForm";
import TodoList from "./components/TodoList";
const App = () => {
const [todo, setTodo] = useState("");
const [todos, setTodos] = useState(
JSON.parse(localStorage.getItem("todos")) ?? []
);
const [editId, setEditId] = useState(0);
useEffect(() => {
localStorage.setItem("todos", JSON.stringify(todos));
}, [todos]);
const handleSubmit = (e) => {
e.preventDefault();
if (editId) {
const editTodo = todos.find((i) => i.id === editId);
const updatedTodos = todos.map((t) =>
t.id === editTodo.id
? (t = { id: t.id, todo })
: { id: t.id, todo: t.todo }
);
setTodos(updatedTodos);
setEditId(0);
setTodo("");
return;
}
if (todo !== "") {
setTodos([{ id: `${todo}-${Date.now()}`, todo }, ...todos]);
setTodo("");
}
};
const handleDelete = (id) => {
const delTodo = todos.filter((to) => to.id !== id);
setTodos([...delTodo]);
};
const handleEdit = (id) => {
const editTodo = todos.find((i) => i.id === id);
setTodo(editTodo.todo);
setEditId(id);
};
return (
<div className="App">
<div className="container">
<h1>Todo List App</h1>
<TodoForm
handleSubmit={handleSubmit}
todo={todo}
editId={editId}
setTodo={setTodo}
/>
<TodoList
todos={todos}
handleEdit={handleEdit}
handleDelete={handleDelete}
/>
</div>
</div>
);
};
export default App;
import React from "react";
const TodoList = ({ todos, handleDelete, handleEdit }) => {
return (
<ul className="allTodos">
{todos.map((t) => (
<li className="singleTodo" key={t.id}>
<span className="todoText">{t.todo}</span>
<button onClick={() => handleEdit(t.id)}>Edit</button>
<button onClick={() => handleDelete(t.id)}>Delete</button>
<input className="checkbox" type="checkbox"></input>
</li>
))}
</ul>
);
};
export default TodoList;
import React from "react";
const TodoForm = ({ handleSubmit, todo, editId, setTodo }) => {
return (
<form className="todoForm" onSubmit={handleSubmit}>
<input
type="text"
value={todo}
onChange={(e) => setTodo(e.target.value)}
/>
<button type="submit"> {editId ? "Edit" : "Add"}</button>
</form>
);
};
export default TodoForm;
Top comments (0)