我在下面提供的信息主要是从Steven Anderson's Feb. 2 Blog entry 和我自己对项目目标的理解中转述的:
Blazor 旨在结合当前 .NET Razor 堆栈中的想法
具有现代 SPA 框架架构。
代码创建
旨在灵活并鼓励基于组件的布局,如下例所示:
<div class="my-styles">
<h2>@Title</h2>
@RenderContent(Body)
<button onclick=@OnOK>OK</button>
</div>
@functions {
public string Title { get; set; }
public Content Body { get; set; }
public Action OnOK { get; set; }
}
在 html 标记中创建一个可重用的组件:
<MyDialog Title="Ski Lift controls" onOK="DismissSkiDialog">
Gondola @gondolaId is now <em>running</em>
</MyDialog>
执行
预计 Blazor 会很快,因为 webAssembly 很快。它编译为由浏览器的 wasm 加载器直接执行的字节码。例如,在javascript中,需要先加载.js文件并将单独的文件合并,然后解析和标记化并构建成树结构,然后可以由浏览器的javascript引擎解释(chrome's v8 engine,例如)。
有关 webAssembly 和 javascript 执行的深入比较,请参阅this post。
SPA 架构和设计
由于已经为 web 构建了很棒的 javascript 框架,Blazor 受到了 React、Vue 和 Angular 等现代框架中已经使用的想法的启发,并将在帖子中详细介绍一些概念,例如:
请注意,虽然这些概念存在于 Razor 的服务器端,但并非所有概念都存在于客户端。前端路由在 Razor 中不可用,并且经常与 javascript 框架结合以填充该场景。
我个人曾与 AngularJs 一起开发过为 Razor 页面提供服务的企业应用程序。它有时会变得凌乱,而且从不觉得“干净”。
总结
Razor 是一种基于服务器架构的解决方案,可以处理 api 逻辑和服务器端模板,但它不能提供 javascript 之外的客户端逻辑。
Blazor 是下一步(希望是继任者),它将允许与 Razor 相同的服务器端功能,但将使用 C# 而不是 javascript 集成客户端逻辑。
我目前正在使用 Blazor 进行小型测试项目,到目前为止,我发现它易于使用。但正如博客和 GitHub 页面上的警告所示,它甚至还没有接近生产就绪。
2018 年 9 月 26 日的第 3 方编辑
在 .NET Conf 2018 中宣布Razor components ("server-side Blazor") will be part of .NET Core 3.0。显示此代码:
// inside index.cshtml - serverside use of blazor
<SurveyPrompt Title="How is Blazor working for you?" />
<div>
<img id="bot" src="@imageurl" />
<div>
<button class="btn btn-primary" onclick="@changeImage">Click me</button>
@functions{
string imageurl = "/images/dotnet-bot-1.png";
void changeImage()
{
if(imageurl.Contains("1"))
{
imageurl= imageurl.Replace("1", "2");
}
else
{
imageurl= imageurl.Replace("2", "1");
}
}
}