reactive client components with persistent state