blazor 是什么 blazor和vue/react对比

13次阅读

Blazor是微软推出的用C#编写前端的Web框架,通过Blazor Server或Blazor WebAssembly两种运行时模型在浏览器中直接运行.net代码,支持Razor组件、前后端共享模型与调试,但需深入理解SignalR、wasm内存、js互操作等底层机制。

blazor 是什么 blazor和vue/react对比

Blazor 是微软推出的、用 C# 写前端的 Web 框架,不是“又一个 JS 框架”,而是绕开 javaScript 直接在浏览器里跑 .NET 代码的技术。它能让你用 Razor 语法写组件,用 C# 处理逻辑,前后端共享模型、验证规则、DTO,甚至调试器直接进浏览器里的 C# 方法——这点 vue/react 做不到。


Blazor Server 和 Blazor WebAssembly 不是“两种写法”,而是两种运行时模型

选错托管模型,项目后期会卡在部署、延迟或离线能力上:

  • Blazor Serverui 渲染全在服务器,靠 SignalRdom diff 到浏览器。首次加载快(
  • Blazor WebAssembly:.NET 运行时编译成 WebAssembly,整个 App 下载到浏览器本地执行。首次加载慢(约 300–500KB 启动包),但完全离线可用,可打包为 PWA,也更容易部署到 CDN。
  • 别指望“一套代码自动适配两种模式”——NavigationManagerJSRuntime 调用方式、状态管理策略都不同;HttpClient 默认行为也得重配(比如 WASM 下不能用服务端 Cookie 认证)。

和 Vue/React 比,C# 的强类型不是“更安全”,而是“少写胶水代码”

Vue 的 v-model 和 Blazor 的 @bind-Value 看似一样,但背后差异很大:

  • Vue 中 :rules="[{ required: true }]" 是 JS 对象,类型靠文档或 TS 类型定义补全;Blazor 中 [Required] 是 C# 特性,校验逻辑直接嵌在实体类里,EditForm 组件自动读取并触发 UI 反馈。
  • Vue 的 props 需手动定义类型(prop: { type: String, required: true }),Blazor 的组件参数是 C# 属性:[Parameter] public string Title { get; set; },IDE 直接报错未赋值、类型不匹配。
  • Vue 的 refdefineComponent 返回对象,TS 提示依赖 JSDoc 或 defineComponent 包装;Blazor 中 @ref 绑定的是强类型实例,InputTextCurrentValue 就是 string,点出来就是方法和事件。

别被“不用 JS”骗了:interop 仍是高频操作,但写法比 Vue/React 更重

调用第三方 JS 库(如 Chart.jsMapbox)不可避免,但 Blazor 的 JS 互操作不是“加个 script 标签就完事”:

立即学习前端免费学习笔记(深入)”;

  • IJSRuntime.InvokeAsync异步的,不能像 Vue 的 onMounted 里直接 new Chart();必须等 OnAfterRender 或用 StateHasChanged() 手动触发重绘。
  • JS 全局函数必须挂到 window 上(如 window.initChart = (id) => {...}),否则 InvokeAsync 找不到入口。
  • 传复杂对象给 JS 时,Blazor 默认序列化为 json 字符串,JS 里要 JSON.parse;而 Vue/React 本就是 JS 生态,对象传递天然无缝。
  • 反过来,JS 调 C#(如按钮点击触发 .NET 方法)要用 DotNet.invokeMethodAsync,且目标方法必须是 Static、带 [JSInvokable] 特性——这比 Vue 的 $emit 或 React 的回调 props 重得多。

Blazor 的真实门槛不在“会不会写 C#”,而在理解它如何与浏览器底层协作:SignalR 连接生命周期、WASM 内存模型、JS interop 的异步边界、以及调试时 chrome DevTools 里看到的不是源码而是 WebAssembly 字节码。这些细节 Vue/React 开发者通常不用碰,但在 Blazor 里,漏掉一个 await 或错配一个托管模型,就会出现“页面不动”“状态丢失”“内存暴涨”这类难复现的问题。

text=ZqhQzanResources