Разница между компонентами Wrapper и Native
У меня есть некоторые разъяснения на стороне сервера Blazor. В чем разница между компонентами Blazor native и обертки? Кто-нибудь может мне помочь, пожалуйста?
2 ответа
Отказ от ответственности: я не использую Blazor, но немного следую за ним с момента его первой презентации, но я никогда не слышал о нативных компонентах и компонентах-оболочках, и в документацию не включена эта формулировка. Поэтому я могу ошибаться, но из формулировки я понимаю, что под "оберткой" подразумевается взаимодействие.
Я собираюсь процитировать некоторый текст из этого отличного сообщения в блоге
Вероятно, нативный, потому что компонент создается только.NET bl(r)azor без javascript:
Поскольку компоненты Razor работают на стороне сервера как приложение.NET Standard, логика написана с использованием технологий.NET. Это возможно благодаря инфраструктуре Blazor, в которой используется RenderTree, абстракция DOM, похожая на виртуальные DOM, используемые в популярных JavaScript-инфраструктурах, таких как Angular и React. Давайте посмотрим на сторону пользовательского интерфейса фреймворка, чтобы понять, как пишутся компоненты.
<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 Components может использовать зависимости экосистемы JavaScript, а через уровень взаимодействия приложение может поддерживать двустороннюю связь с зависимостями.NET и JavaScript. Это полезно в ситуациях, когда Razor Components не поддерживает необходимый браузер /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);
},
// ...
Компоненты оболочки - это концепция или шаблон, используемые в React. В Blazor таких шаблонов не существует.
На стороне сервера Blazor и на стороне клиента Blazor используют одну и ту же компонентную модель.
Родной Блазор? Никогда не слышал, чтобы люди Blazor использовали этот термин, но если вы хотите использовать этот термин для обозначения клиентской части Blazor, использующей Web Assembly, продолжайте. Нет проблем со мной.
Вместо этого позвольте мне ввести новый термин: компоненты Blazor. Никогда не слышал, чтобы люди Blazor использовали этот термин, по крайней мере, формально, но он звучит для меня естественно и уместно, особенно потому, что компоненты Razor устарели, и вместо них следует использовать термины Blazor на стороне сервера и Blazor на стороне клиента.
Надеюсь это поможет...