我在blazor服务器端有一些说明。 blazor本机组件和包装器组件之间有什么区别?谁能帮我吗?
答案 0 :(得分:2)
免责声明:我没有在使用blazor,但是自从首次介绍以来,它就使用了一点,但是我从未听说过本机和包装器组件nor does the documentation include this wording。因此,我可能是错的,但是从措辞上我可以理解,“包装”意味着互操作性。
我要引用this excelent blog post上的一些文字
可能是 native ,因为该组件仅由.NET bl(r)azor创建而没有javascript:
由于Razor组件将服务器端作为.NET Standard应用程序运行,因此逻辑是使用 .NET技术编写的。由于Blazor框架采用了RenderTree,这是可能的,该框架是DOM抽象,类似于流行的JavaScript框架(如Angular和React)中使用的虚拟DOM。让我们看一下框架的UI端,以了解如何编写组件。
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">
Click me
</button>
@functions {
int currentCount = 0;
[Parameter] protected int CountBy { get; set; } = 1;
void IncrementCount()
{
currentCount += CountBy;
}
}
可能是包装器,因为我们在组件的互操作性层中使用了JS函数。
另外,Razor组件应用程序可以使用JavaScript生态系统的依赖关系,并且通过互操作性层,该应用程序可以与 .NET和JavaScript依赖关系进行双向通信。对于Razor组件不支持必要的浏览器/ DOM API或现有JavaScript库有用的情况,这很有用。
GeoLocation.cs(.NET)
public class Geolocation
{
// ...
public async Task GetCurrentPosition(
Action<Position> onSuccess,
Action<PositionError> onError,
PositionOptions options = null)
{
OnGetPosition = onSuccess;
OnGetPositionError = onError;
await JSRuntime.Current.InvokeAsync<bool>(
"interopGeolocation.getCurrentPosition",
new DotNetObjectRef(this),
options);
}
// ...
}
interopGeolocation.js(浏览器)
window.interopGeolocation = {
getCurrentPosition: function (geolocationRef, options) {
const success = (result) => {
geolocationRef.invokeMethodAsync(
'RaiseOnGetPosition',
interopGeolocation.toSerializeable(result));
};
const error = (er) =>
geolocationRef.invokeMethodAsync(
'RaiseOnGetPositionError',
er.code);
navigator.geolocation.getCurrentPosition(
success,
error,
options);
},
// ...
答案 1 :(得分:1)
包装器组件是React中使用的概念或模式。 Blazor中不存在此类模式。
服务器端Blazor和客户端端Blazor共享相同的组件模型。
本地剃刀?从来没有听说过Blazor的人使用此术语,但是如果您希望使用此术语来指代运行Web Assembly的客户端Blazor,请继续。我没问题。
让我介绍一个新术语: Blazor Components 。从来没有听说过Blazor的人至少使用(不是正式地)这个术语,但这在我看来是自然而适当的,尤其是因为 Razor Components 已过时,并且术语服务器端应当使用Blazor和客户端Blazor。
希望这对您有帮助...