Skip to content

Instantly share code, notes, and snippets.

@ozcanzaferayan
Created May 19, 2020 15:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ozcanzaferayan/8a31eb3c7d6e258e8c6c6483ce2127a6 to your computer and use it in GitHub Desktop.
Save ozcanzaferayan/8a31eb3c7d6e258e8c6c6483ce2127a6 to your computer and use it in GitHub Desktop.
import React, { useState } from "react";
import { useRecoilState, atom } from "recoil";
const todoListState = atom({
key: "todoListState",
default: [
{ name: "Apples", isCompleted: false },
{ name: "Eggs", isCompleted: false },
{ name: "Butter", isCompleted: false },
],
});
function App() {
const [todoList, setTodoList] = useRecoilState(todoListState);
const [todo, setTodo] = useState({ name: "" });
const deleteItemAt = (index) => {
const todos = [...todoList];
todos.splice(index, 1);
setTodoList(todos);
};
const editItemAt = (index) => {
const todos = [...todoList];
const todo = todoList[index];
var name = prompt("Change item name", todo.name);
todos[index] = { ...todo, name: name };
setTodoList(todos);
};
const completeAt = (index) => {
const todos = [...todoList];
const todo = todos[index];
todos[index] = { name: todo.name, isCompleted: !todo.isCompleted };
setTodoList(todos);
};
return (
<>
<input
value={todo.name}
onChange={(e) => setTodo({ name: e.target.value })}
/>
<button onClick={() => setTodoList((todos) => [...todos, todo])}>
Add
</button>
{todoList.map((item, index) => (
<li key={item.name}>
<span
onClick={() => completeAt(index)}
style={{
textDecoration: item.isCompleted ? "line-through" : "initial",
}}
>
{item.name}
</span>
<button onClick={() => deleteItemAt(index)}>Delete</button>
<button onClick={() => editItemAt(index)}>Edit</button>
</li>
))}
</>
);
}
export default App;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment