import { trpc } from "../../trpc/client"; import { useState } from "react"; export function TodoList({ initialTodoItems, }: { initialTodoItems: { text: string }[]; }) { const [todoItems, setTodoItems] = useState(initialTodoItems); const [newTodo, setNewTodo] = useState(""); return ( <>
{ ev.preventDefault(); if (newTodo.trim() === "") return; // Optimistic UI update setTodoItems((prev) => [...prev, { text: newTodo }]); try { await trpc.onNewTodo.mutate(newTodo); setNewTodo(""); } catch (e) { console.error(e); // rollback setTodoItems((prev) => prev.slice(0, -1)); } }} > setNewTodo(ev.target.value)} value={newTodo} />
); }