import { useMutation, useSuspenseQuery } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' import { orpc } from '@/client/orpc' import { useInvalidateTodos } from '@/client/queries/todo' import { TodoForm } from '@/components/TodoForm' import { TodoItem } from '@/components/TodoItem' export const Route = createFileRoute('/')({ component: Todos, loader: async ({ context }) => { await context.queryClient.ensureQueryData(orpc.todo.list.queryOptions()) }, }) function Todos() { const listQuery = useSuspenseQuery(orpc.todo.list.queryOptions()) const invalidateTodos = useInvalidateTodos() const createMutation = useMutation(orpc.todo.create.mutationOptions({ onSuccess: invalidateTodos })) const updateMutation = useMutation(orpc.todo.update.mutationOptions({ onSuccess: invalidateTodos })) const deleteMutation = useMutation(orpc.todo.remove.mutationOptions({ onSuccess: invalidateTodos })) const todos = listQuery.data const completedCount = todos.filter((todo) => todo.completed).length const totalCount = todos.length const progress = totalCount > 0 ? (completedCount / totalCount) * 100 : 0 return (
保持专注,逐个击破
没有待办事项
输入上方内容添加您的第一个任务