blazor-expert
npx skills add https://github.com/markpitt/claude-skills --skill blazor-expert
Agent 安装分布
Skill 文档
Blazor Expert – Orchestration Hub
Expert-level guidance for developing applications with Blazor, Microsoft’s framework for building interactive web UIs using C# instead of JavaScript.
Quick Reference: When to Load Which Resource
| Task | Load Resource | Key Topics |
|---|---|---|
| Build components, handle lifecycle events | components-lifecycle.md | Component structure, lifecycle methods, parameters, cascading values, RenderFragment composition |
| Manage component state, handle events | state-management-events.md | Local state, EventCallback, data binding, cascading state, service-based state |
| Configure routes, navigate between pages | routing-navigation.md | Route parameters, constraints, navigation, NavLink, query strings, layouts |
| Build forms, validate user input | forms-validation.md | EditForm, input components, DataAnnotations validation, custom validators |
| Setup authentication & authorization | authentication-authorization.md | Auth setup, AuthorizeView, Authorize attribute, policies, claims |
| Optimize performance, use JavaScript interop | performance-advanced.md | Rendering optimization, virtualization, JS interop, lazy loading, WASM best practices |
Orchestration Protocol
Phase 1: Task Analysis
Identify your primary objective:
- UI Building â Load components-lifecycle.md
- State Handling â Load state-management-events.md
- Navigation â Load routing-navigation.md
- Data Input â Load forms-validation.md
- User Access â Load authentication-authorization.md
- Speed/Efficiency â Load performance-advanced.md
Phase 2: Resource Loading
Open the recommended resource file(s) and search for your specific need using Ctrl+F. Each resource is organized by topic with working code examples.
Phase 3: Implementation & Validation
- Follow code patterns from the resource
- Adapt to your specific requirements
- Test in appropriate hosting model (Server/WASM/Hybrid)
- Review troubleshooting section if issues arise
Blazor Hosting Models Overview
Blazor Server
- How: Runs on server via SignalR
- Best For: Line-of-business apps, need full .NET runtime, small download size
- Trade-offs: High latency, requires connection, server resource intensive
Blazor WebAssembly
- How: Runs in browser via WebAssembly
- Best For: PWAs, offline apps, no server dependency, client-heavy applications
- Trade-offs: Large initial download, limited .NET APIs, slower cold start
Blazor Hybrid
- How: Runs in MAUI/WPF/WinForms with Blazor UI
- Best For: Cross-platform desktop/mobile apps
- Trade-offs: Platform-specific considerations, additional dependencies
Decision: Choose based on deployment environment, offline requirements, and server constraints.
Common Implementation Workflows
Scenario 1: Build a Data-Entry Component
- Read components-lifecycle.md – Component structure section
- Read state-management-events.md – EventCallback pattern
- Read forms-validation.md – EditForm component
- Combine: Create component with parameters â capture user input â validate â notify parent
Scenario 2: Implement User Authentication & Protected Pages
- Read authentication-authorization.md – Setup section
- Read routing-navigation.md – Layouts section
- Read authentication-authorization.md – AuthorizeView section
- Combine: Configure auth â create login page â protect routes â check auth in components
Scenario 3: Build Interactive List with Search/Filter
- Read routing-navigation.md – Query strings section
- Read state-management-events.md – Data binding section
- Read performance-advanced.md – Virtualization section
- Combine: Capture search input â update URL query â fetch filtered data â virtualize if large
Scenario 4: Optimize Performance of Existing App
- Read performance-advanced.md – All sections
- Identify bottlenecks:
- Unnecessary renders? â ShouldRender override, @key directive
- Large lists? â Virtualization
- JS latency? â Module isolation pattern
- Apply targeted optimizations from resource
Key Blazor Concepts
Component Architecture
- Components: Self-contained UI units with optional logic
- Parameters: Inputs to components, enable reusability
- Cascading Values: Share state with descendants without explicit parameters
- Events: Child-to-parent communication via EventCallback
- Layouts: Parent wrapper for consistent page structure
State Management
- Local State: Component-specific fields and properties
- Cascading Values: Share state to descendants
- Services: Application-wide state via dependency injection
- Event Binding: React to user interactions
- Data Binding: Two-way synchronization with UI
Routing & Navigation
- @page Directive: Make component routable
- Route Parameters: Pass data via URL (
{id:int}) - Navigation: Programmatic navigation via NavigationManager
- NavLink: UI component that highlights active route
- Layouts: Wrap pages with common structure
Forms & Validation
- EditForm: Form component with validation support
- Input Components: Typed controls (InputText, InputNumber, etc.)
- Validators: DataAnnotations attributes or custom logic
- EventCallback: Notify parent of form changes
- Messages: Display validation errors to user
Authentication & Authorization
- Claims & Roles: Identify users and define access levels
- Policies: Fine-grained authorization rules
- Authorize Attribute: Protect pages from unauthorized access
- AuthorizeView: Conditional rendering based on permissions
- AuthenticationStateProvider: Get current user information
Performance Optimization
- ShouldRender(): Prevent unnecessary re-renders
- @key Directive: Help diffing algorithm match list items
- Virtualization: Render only visible items in large lists
- JS Interop: Call JavaScript from C# and vice versa
- AOT/Trimming: Reduce WASM download size (production)
Best Practices Highlights
Component Design
â
Single Responsibility – Each component has one clear purpose
â
Composition – Use RenderFragments for flexible layouts
â
Parameter Clarity – Use descriptive names, mark required with [EditorRequired]
â
Proper Disposal – Implement IDisposable to clean up resources
â
Event-Based Communication – Use EventCallback for child-to-parent updates
State Management
â EventCallback Over Action – Proper async handling â Immutable Updates – Create new objects/collections, don’t mutate â Service-Based State – Use scoped services for shared state â Unsubscribe from Events – Prevent memory leaks in Dispose â InvokeAsync for Background Threads – Thread-safe state updates
Routing & Navigation
â
Route Constraints – Use :int, :guid, etc. to validate formats
â
NavLink Component – Automatic active state highlighting
â
forceLoad After Logout – Clear client-side state
â
ReturnUrl Pattern – Redirect back after login
â
Query Strings – Preserve filters/pagination across navigation
Forms & Validation
â EditForm + DataAnnotationsValidator – Built-in validation â ValidationMessage – Show field-level errors â Custom Validators – Extend for complex rules â Async Validation – Check server availability before submit â Loading State – Disable submit button while processing
Authentication & Authorization
â Server Validation – Never trust client-side checks alone â Policies Over Roles – More flexible authorization rules â Claims for Details – Store user attributes in claims â Cascading AuthenticationState – Available in all components â Error Boundaries – Graceful error handling
Performance
â @key on Lists – Optimize item matching â ShouldRender Override – Prevent unnecessary renders â Virtualization for Large Lists – Only render visible items â JS Module Isolation – Load and cache JS modules efficiently â AOT for WASM – Production deployments
Common Troubleshooting
Component Not Re-rendering
- Cause: Mutation instead of reassignment
- Fix: Create new object/collection:
items = items.Append(item).ToList() - Or: Call
StateHasChanged()manually
Parameter Not Updating
- Cause: Parent not re-rendering or same object reference
- Fix: Parent must re-render, ensure new reference for objects
- Debug: Check OnParametersSet is firing
JS Interop Errors
- Cause: Called before script loaded or wrong function name
- Fix: Use
firstRendercheck, verify JS file path - Pattern: Use module isolation:
await JS.InvokeAsync("import", "./script.js")
Authentication State Not Available
- Cause: Cascading parameter not provided or timing issue
- Fix: Ensure AuthenticationStateProvider configured
- Pattern: Always null-check and use
await AuthStateTask!in code block
Large List Performance Issues
- Cause: Rendering all items in DOM
- Fix: Use Virtualize component for 1000+ items
- Alternative: Paginate with buttons/infinite scroll
Blazor Server Connection Issues
- Cause: SignalR connection dropped or configuration issue
- Fix: Implement reconnection UI, increase timeout
- Config: Adjust
CircuitOptions.DisconnectedCircuitRetentionPeriod
Resource Files Summary
components-lifecycle.md
Complete guide to component structure, lifecycle methods, parameters, cascading values, and composition patterns. Essential for understanding Blazor component fundamentals.
state-management-events.md
Comprehensive coverage of local and service-based state, event handling with EventCallback, data binding patterns, and component communication. Core for interactive UI building.
routing-navigation.md
Complete routing reference including route parameters, constraints, programmatic navigation, query strings, and layout management. Essential for multi-page apps.
forms-validation.md
Full forms API with EditForm component, input controls, DataAnnotations validation, custom validators, and form patterns. Required for data entry scenarios.
authentication-authorization.md
Complete auth setup for Server and WASM, AuthorizeView, policies, claims-based access control, and login/logout patterns. Necessary for secured applications.
performance-advanced.md
Performance optimization techniques including ShouldRender, virtualization, JavaScript interop patterns, lazy loading, and WASM best practices. Vital for production apps.
Implementation Approach
When implementing Blazor features:
- Identify Your Task – Match against the decision table above
- Load Relevant Resource – Read the appropriate .md file
- Find Code Example – Search resource for similar implementation
- Adapt to Your Context – Modify for your specific requirements
- Test Thoroughly – Verify in your hosting model
- Reference Troubleshooting – Consult resource if issues arise
Next Steps
- New to Blazor? Start with components-lifecycle.md
- Building Data App? Move through: components â state â forms â validation
- Scaling Existing App? Focus on performance-advanced.md
- Adding Security? Follow authentication-authorization.md
Version: 2.0 – Modular Orchestration Pattern
Last Updated: December 4, 2025
Status: Production Ready â