目录

C#角度理解前端生态

从 C# WPF 开发者视角理解前端生态

先用 WPF 世界做类比

WPF 世界                          前端世界
─────────────────────────────────────────────────
C# 语言                    →      JavaScript 语言
XAML                        →      HTML + CSS
.NET Framework / .NET Core  →      浏览器运行时
NuGet                       →      npm (包管理器)
MSBuild                     →      Webpack / Vite (构建工具)
MVVM 模式 (手写)            →      原生 JS (手写一切)
Prism / MVVM Toolkit        →      Vue.js / React (框架)
Visual Studio               →      VS Code

核心概念逐个击破

第一层:原始方式

HTML + CSS + JS(原生三件套)

这就像用 纯 C# + 手写 XAML 不用任何框架,所有东西自己管理:

<!-- 你在 Electron 里写的大概是这样 -->
<div id="app">
    <h1 id="title">Hello</h1>
    <button onclick="changeName()">点击</button>
</div>

<script>
    let name = "World";
    function changeName() {
        name = "Electron";
        // 😩 手动更新 DOM(就像手动更新 UI 控件)
        document.getElementById("title").innerText = "Hello " + name;
    }
</script>

痛点:数据变了,要手动去更新每个 UI 元素。

第二层:Vue.js / React —— UI 框架

本质:帮你自动同步数据和界面的框架

Vue.js ≈ WPF 中的「数据绑定 + MVVM 模式」
React ≈ 另一种风格的「数据绑定 + MVVM 模式」

Vue.js 的方式:

<template>
    <!-- 😊 类似 XAML  {Binding Name} -->
    <h1>Hello {{ name }}</h1>
    <button @click="changeName">点击</button>
</template>

<script>
export default {
    data() {
        return { name: "World" }   // 类似 ViewModel 的属性
    },
    methods: {
        changeName() {
            this.name = "Vue";     // 改数据,UI 自动更新!
            // 不需要手动操作 DOM
            // 就像 WPF 的 INotifyPropertyChanged 自动通知 UI
        }
    }
}
</script>

对比 WPF 你就秒懂了:

// WPF ViewModel
public class MainViewModel : INotifyPropertyChanged
{
    private string _name = "World";
    public string Name
    {
        get => _name;
        set { _name = value; OnPropertyChanged(); }  // 通知 UI 更新
    }
    
    public void ChangeName() => Name = "WPF";
}
<!-- WPF XAML -->
<TextBlock Text="{Binding Name}" />
<Button Command="{Binding ChangeNameCommand}" Content="点击"/>

Vue.js 和 WPF 的 MVVM 做的是同一件事:数据驱动 UI。

第三层:Vite —— 构建工具

Vite ≈ MSBuild + 热重载 + 一堆优化

Vite 不是框架!Vite 是工具!
你写的源代码(.vue / .jsx / .ts)
    ╔═══════════╗
    ║   Vite    ║  ← 编译、打包、优化、热重载
    ╚═══════════╝
浏览器能运行的(.html / .css / .js)

为什么需要 Vite?

问题                              Vite 解决方案
──────────────────────────────────────────────────
.vue 文件浏览器不认识        →    编译成标准 JS
想用 TypeScript             →    自动转译成 JS
想用 SCSS/LESS              →    自动编译成 CSS
100 个文件太多请求           →    打包合并
修改代码要手动刷新浏览器     →    热重载(改代码即时看效果)

用 WPF 类比:

C# WPF 世界:
  .cs + .xaml  →  MSBuild/编译器  →  .exe

前端世界:
  .vue + .ts   →  Vite           →  .html + .js + .css

你不会问"为什么要用 MSBuild",同理 Vite 就是前端的构建器。

全景图:所有东西的关系

                        ┌─────────────────────────────┐
                        │       你要做的产品类型         │
                        └──────────┬──────────────────┘
            ┌──────────────────────┼──────────────────────┐
            │                      │                      │
            ▼                      ▼                      ▼
       桌面应用               网站/Web App             移动 App
       Electron                                       uni-app
            │                      │                      │
            │                      │                      │
            ▼                      ▼                      ▼
    ┌──────────────────────────────────────────────────────────┐
    │                   UI 框架(选一个)                        │
    │                                                          │
    │    Vue.js              React             原生 JS          │
    │   (像 WPF MVVM)    (另一种风格)        (纯手写)           │
    │                                                          │
    └──────────────────────┬───────────────────────────────────┘
    ┌──────────────────────────────────────────────────────────┐
    │                  构建工具(选一个)                         │
    │                                                          │
    │    Vite(新,快)          Webpack(老,功能全)             │
    │                                                          │
    └──────────────────────┬───────────────────────────────────┘
    ┌──────────────────────────────────────────────────────────┐
    │                  底层语言                                  │
    │                                                          │
    │           HTML + CSS + JavaScript/TypeScript              │
    │                                                          │
    └──────────────────────────────────────────────────────────┘

回答你的核心困惑

“最终都会回到 Vue.js?”

不完全是,但你的直觉方向是对的:

Electron + Vite + Vue     →  桌面应用(替代你的 WPF)
Vite + Vue                →  网站 / Web App
Vite + React              →  网站 / Web App(另一个选择)
uni-app(基于 Vue)        →  跨平台移动 App
Nuxt(基于 Vue)           →  服务端渲染网站

Vue.js 在中文社区特别流行(作者尤雨溪是华人),所以你看到的中文资料大量指向 Vue。但 React 在全球市场份额更大。

Vue  ≈  Prism(MVVM 框架,中国社区更流行)
React ≈  另一个 MVVM 框架(全球更流行)
两个都能做同样的事,选一个深入就好

给你的建议路径

作为 WPF 开发者,你已有 MVVM 思维,学 Vue 会很快:

第 1 步(你已完成)✅  HTML + CSS + JS 基础
第 2 步             ✅  了解 Electron 能做桌面应用
第 3 步(推荐现在)  👉  学 Vue 3(组合式 API)
第 4 步              👉  用 Vite 作为构建工具
第 5 步              👉  Electron + Vite + Vue 重构你的桌面应用

快速开始一个项目:

# 一行命令,创建 Electron + Vue + Vite 项目
npm create electron-vite@latest my-app

生成的项目结构你会觉得很亲切:

my-app/
├── src/
   ├── main/           Electron 主进程(类似 App.xaml.cs
   ├── preload/        预加载脚本
   └── renderer/       渲染进程(类似 WPF 的窗口)
       ├── App.vue     根组件(类似 MainWindow.xaml
       ├── components/ 子组件(类似 UserControls
       └── main.js     入口
├── package.json        类似 .csproj
└── vite.config.js      类似 MSBuild 配置

一句话总结:

Vue/React 是帮你做数据绑定的框架(类似 WPF 的 MVVM),Vite 是编译打包工具(类似 MSBuild),Electron 是运行容器(类似 .NET Runtime)。它们是不同层级的东西,组合在一起用的。