| theme | @xebia/slidev-theme-xebia | |||
|---|---|---|---|---|
| transition | fade | |||
| addons |
|
|||
| download | false | |||
| browserExporter | true | |||
| record | false | |||
| editor | true | |||
| overviewSnapshots | false | |||
| glowEnabled | true | |||
| layout | cover | |||
| background | /msWebUiReact-cover.png | |||
| description | Exploring Microsoft's web UI technology choices and why React is the strategic choice for Windows developers modernizing applications | |||
| hideInToc | true | |||
| publicDeckPath | msWebUiReact |
layout: image-right background: /msWebUiReact-desktop-kings.jpg backgroundSize: contain hideInToc: true
- Drag & drop designer
- Event-driven model
- RAD development
- Legacy but still used
- .NET Framework/Core
- XAML-based UI
- Data binding magic
- MVVM pattern
- DirectX acceleration
- Still actively maintained
- Browser plugin
- WPF for the web
- Used by Netflix
- Discontinued β°οΈ
- HTML5 won
- Desktop-like web dev
- ViewState complexity
- Server-centric
- Legacy now
- Replaced by MVC/Razor
- Universal Windows Platform
- Write once, run on Win10/11, Xbox, HoloLens
- Windows Store apps
- XAML-based
- Transitioning to WinUI 3
- True cross-platform mobile
- iOS, Android, Windows
- C# + XAML
- Sunset May 2024
- Evolved into .NET MAUI
- Launched: 2021
- Platform: Windows 10/11
- Language: C#, C++
- Architecture: MVVM
- Rendering: DirectX 12
- Design: Fluent Design
- Modern Windows apps
- High-performance desktop
- Native Windows 11 experiences
- Gaming launchers
- Enterprise tools
- Native performance
- Hardware acceleration
- Fluent Design built-in
- Familiar to WPF devs
- Strong VS tooling
- Windows-only
- Steeper learning curve
- XAML complexity
- Smaller community
- Desktop paradigm only
- Launched: 2022
- Platform: Windows, macOS, iOS, Android, Tizen
- Language: C# + XAML
- Architecture: MVVM, Handlers
- One codebase: 90%+ sharing
- Mobile-first apps
- Desktop + mobile
- Enterprise internal tools
- Cross-platform utilities
- Hybrid with Blazor
- Truly cross-platform
- Native controls
- Blazor Hybrid support
- Familiar XAML
- Single project structure
- Mobile paradigms required
- Need macOS for iOS builds
- Young ecosystem
- Performance tuning needed
- Not for web browsers
layout: image-right title: Blazor - C# for the Web background: /msWebUiReact-blazor.jpg backgroundSize: contain
- Launched: 2018-2020
- Platform: Web browsers
- Language: C# + Razor
- Models: Server, WebAssembly, Hybrid
- Paradigm: Component-based
- Full-stack web apps
- SPAs
- Progressive Web Apps
- Admin dashboards
- Hybrid desktop/mobile (via MAUI)
layout: image-right title: Blazor - Developer View background: /msWebUiReact-blazor.jpg backgroundSize: contain hideInToc: true
- C# in the browser
- No JavaScript required
- Full .NET ecosystem
- Strong typing
- Familiar to C# devs
- Multiple hosting models
- Larger initial payload (WASM)
- Web concepts still needed
- Smaller community vs React
- CSS still required
- Limited component libraries
Where are we and where to go from here?
layout: image-right background: /msWebUiReact-crossroads.jpg backgroundSize: contain hideInToc: true
I tell you...
- SharePoint β is React
- Power Platform β is React
- Teams β is React
- Outlook (new) β is React
- Office Add-ins β is React
If Microsoft bets on React...
Should you?
DEMO
layout: image-right title: Microsoft Uses React! background: /msWebUiReact-microsoft-react.png hideInToc: true
- SharePoint Framework: React + TypeScript
- Teams: React rewrite
- Outlook: React rewrite
- Power Platform: React controls
- Fluent UI: React components
- Ecosystem size
- Developer availability
- Community support
- Proven at scale
- Cross-team collaboration
- Industry standard
| Aspect | WinUI 3 | .NET MAUI | Blazor | React |
|---|---|---|---|---|
| Platform | Windows only | Desktop + Mobile | Web + Hybrid | Web (+ Native) |
| Language | C#/XAML | C#/XAML | C#/Razor | JavaScript/TypeScript |
| Paradigm | MVVM | MVVM | Component | Component |
| Community | Small | Growing | Growing | Massive |
| Jobs | Limited | Limited | Growing | Abundant |
| Libraries | Moderate | Moderate | Limited | Vast |
| Browser Support | β | β | β | β |
title: React Component Basics layout: image-right background: /msWebUiReact-demo1.jpg hideInToc: true
import React from 'react';
interface ShipProps {
name: string;
containers: number;
}
const Ship: React.FC<ShipProps> =
({ name, containers }) => {
return (
<div className="ship-card">
<h2>{name}</h2>
<p>Containers: {containers}</p>
</div>
);
};Key Concepts: TypeScript props, functional components, JSX syntax
layout: image-right title: What Transfers Directly background: /msWebUiReact-transfers.jpg hideInToc: true
- Object-oriented thinking
- Component composition
- Event handling
- Async/await patterns
- Dependency injection
- Testing practices
- Strong typing
- Interfaces
- Classes
- Generics
- Null safety
- IDE IntelliSense
::left::
- Two-way data binding
- Complex state trees
- Imperative commands
- Control templates
- Design-time tools
- Click-drag designers
- Stateful components
- Object oriented programming
::right::
- One-way data flow
- Component state
- Declarative UI
- Composition > inheritance
- Code-first design
- Props down, events up
- Stateless components
- Functional programming with components
graph LR
A[UserControl] -->|becomes| B[Function Component]
C[DependencyProperty] -->|becomes| D[Props]
E[INotifyPropertyChanged] -->|becomes| F[useState Hook]
G[DataTemplate] -->|becomes| H[Component Function]
I[Style/ResourceDictionary] -->|becomes| J[CSS/Styled Components]
K[Command] -->|becomes| L[Event Handler]
M[ObservableCollection] -->|becomes| N[Array State]
style B fill:#0B7A9E,stroke:#333,color:#fff
style D fill:#0B7A9E,stroke:#333,color:#fff
style F fill:#0B7A9E,stroke:#333,color:#fff
style H fill:#0B7A9E,stroke:#333,color:#fff
style J fill:#0B7A9E,stroke:#333,color:#fff
style L fill:#0B7A9E,stroke:#333,color:#fff
style N fill:#0B7A9E,stroke:#333,color:#fff
layout: image-right title: The CSS Challenge background: /msWebUiReact-css-challenge.png backgroundSize: 120% hideInToc: true
- Different mental model
- Browser quirks
- Layout complexity
- Responsive design
- Specificity rules
- hundreds of ways to style
- Fluent UI components
- Material-UI (MUI)
- CSS-in-JS libraries
- Tailwind CSS
- Component libraries
- Let designers handle it!
::left::
- Microsoft's design language
- Office 365 look & feel
- Enterprise-ready
- React, Web Components
- TypeScript-first
- Active development
::right::
- Google's Material Design
- Larger community
- More components
- Extensive docs
- Free + Pro versions
- Industry standard
- Layout Components
::left::
π MyApp/
βββ π Views/
β βββ π MainWindow.xaml
β βββ π UserControls/
βββ π ViewModels/
βββ π Models/
βββ π Services/
βββ π App.xaml
::right::
π my-app/
βββ π src/
β βββ π components/
β β βββ π Ship.tsx
β β βββ π ShipList.tsx
β βββ π hooks/
β βββ π services/
β βββ π App.tsx
βββ π package.json
layout: image-right title: Tooling & Ecosystem background: /msWebUiReact-tooling.jpg backgroundSize: contain
- VS Code (not Visual Studio!)
- React DevTools
- npm/yarn package managers
- Vite/Create React App
- ESLint/Prettier
- React Router (navigation)
- NextJS (SSR/SSG)
- Fetch (HTTP)
- React Query (data fetching)
- Formik/React Hook Form
- Jest/React Testing Library
- Storybook (component dev)
::left::
- Trying to use two-way binding
- Over-engineering state
- Fighting CSS instead of using libraries
- Not using TypeScript
- Ignoring functional patterns
- Over-componentizing
::right::
- Embrace one-way data flow
- Keep state minimal
- Use component libraries
- TypeScript from day 1
- Think in components
- Composition over complexity
::left::
- β High risk
- β Long timeline
- β No incremental value
- β Clean architecture
- Rarely recommended
::right::
- β Lower risk
- β Continuous delivery
- β Learn as you go
- β Parallel systems
- Recommended path
- Embed React in WPF/WinForms
- WebView2 control
- Gradual transition
- Share authentication
- Good for prototyping
- Keep C# skills
- Gradual web learning
- MAUI + Blazor
- Desktop + Web
- Bridge solution
::left::
- Windows-only forever
- Need native performance
- Desktop paradigm fits
- Existing WPF investment
- Need mobile + desktop
- Prefer C#/XAML
- Internal enterprise apps
- Can avoid web browsers
::right::
- Want to stay in C#
- Learning web gradually
- Small team, one language
- Accept smaller ecosystem
- Web-first application
- Need largest ecosystem
- Want abundant hiring pool
- Following Microsoft's lead
::left::
- Developer velocity
- Bug rates
- Performance benchmarks
- Bundle size
- Load times
- Code maintainability
::right::
- Time to market
- Hiring success
- Team satisfaction
- Cost per feature
- Browser compatibility
- User adoption
- 30+ years of UI evolution
- From desktop-only to web-first
- Microsoft itself uses React
- Blazor is great, but niche
- Ecosystem matters
- Many skills transfer
- TypeScript feels like C#
- Component libraries save you
- CSS avoidable with FluentUI / MUI
- React is strategic choice
layout: image-right title: The Strategic Answer background: /msWebUiReact-strategic-answer.jpg hideInToc: true
- SharePoint
- Teams
- Outlook
- Power Platform
- Office 365
- If building for web
- If modernizing legacy
- If hiring matters
- If ecosystem matters
- If following best practices
