Обсуждаем Blazor
начало здесь
"щас как раз на 8 все проекты
обёртка это самописные классы, которые ни от чего не зависят
они абстрагируют всякие вещи типа хранения введённых данных (числа, строки и т.п.), событий, принадлежности к форме (т.е. есть родитель-контейнер), гуевые коллеции (списки, деревья, таблицы) и т.п.
писаться они начали не так давно, так что сильно много там не было написано, сейчас ещё дальше дописываем"
а у нас есть обёртки над ними - типа абстрагируемся от сторонних либ
Похоже у страха глаза велики.
А вы в курсе что с 8 версии блэзор ведет себя по другому, чем раньше?
Так-то я уже давно обновил версию, запустил по ф5 и всё запустилось.
Довольно странно, тут версию не меняшь и то постоянная борьба
https://www.faciletechnolab.com/blog/a-comprehensive-explo...
Чёт херня какая-то. Например
"1. Enhanced Navigation & Form Handling
Say goodbye to clunky page reloads! Blazor now intelligently updates the DOM with server-rendered content, resulting in seamless navigation and form interactions that feel like a native single-page application."
Это декларировалось с амых первых версий Блейзора - мы "интеллигентно обновляем" части ДОМа, а не всю страницу сразу. Другое дело, что работать могло куда хуже, чем декларировалось. Ну, после какой там по счёту итерации уже допилили, наверное.
Остальное вроде не влияет на старый код - т.е. всё должно запуститься в новой версии без проблем. Если, конечно, вы не используете разные хаки и недокументированные возможнсоти, работа которых не гарантировалась в новых версиях, или либы, которые использовали это.
Про секции вскользь почитал на МДСН - не понял, зачем дополнительно к компонентам и RenderFragment ещё какие-то секции вводить? В ASP.NET MVC тоже что-то подобное было - только больше усложнили всё.
URL fragments это же часть хромиумного движка? Т.е. только в хромиумных браузерах будет поддерживаться. Лису рано или поздно закопают. Уже принесли лопаты. Раньше якоря надо было специально расставлять, а теперь можно сослаться даже на середину предложения.
Остальное вроде не влияет на старый код
У меня на 11 страницах различия и проблемы расписаны ![]()
Как минимум появилось 3 режима SSR, interactive Server, interactive client.
И полно вещей которые работают только в одном из этих режимов.
например:
OnAfterRenderAsync для SSR не вызывается
IJSRuntime для SSR не поддерживается
OnAfterRenderAsync - я это использую, но вроде просто поменял версию в свойствах проекта и всё скомпилировалось всё равно без проблем. У нас серверный рендер, а какой точно из новомодных - не знаю.
У нас серверный рендер, а какой точно из новомодных - не знаю
Можно было написать длинную тираду по этому поводу, но зная вас лучше промолчать. ![]()
Вот чисто для примера
https://www.thinktecture.com/en/blazor/blazor-components-l...
и всё скомпилировалось всё равно без проблем.
а причем тут компиляция? Рендеринг происходит в процессе исполнения программы.
Я тоже не знаю отчего у вас всё без проблем работает, приходится подозревать только микрософт ![]()
Возможно просто при замене версии никакой особой замены и не происходит.
Где то у меня и примеры были которые многие проблемы демонстрируют, но нет пока времени искать, сорри.
А обязательно должно было сломаться у всех?
Хотя у нас не такие уж простые компоненты. Как минимум своё дерево классов компонентов с наследованиями и перезаписями некоторых обработчиков событий из этого lifecycle. И на это же дерево подобное же дерево обёрток и классов моделей.
А в чём проблема? ИИшке дал задание, и она починила.
А обязательно должно было сломаться у всех
Это у меня подобная идея была ![]()
Но получается неверная, если новые функции не включены - работает по старому. Тоже как идея ![]()
ИИшке дал задание, и она починила.
фигвам, тут нет "чёткого" задания. Да и случайно проверил, была ошибка что кнопа не работала. Не додумалась, что рендеринг режим неверный.
вот можете поиграться? не уверен, что всё правильно, но будете удивлены тем что выводится, после нажатия на кнопку
<button @onclick="OnRefresh">Refresh</button>
<CascadingValue Value="@_forecasts" IsFixed="false">
<TestComponent></TestComponent>
</CascadingValue>
@code {
private WeatherForecast[]? _forecasts;
[CascadingParameter]
private WeatherForecast[]? Forecasts { get; set; }
protected override async Task OnInitializedAsync()
{
Console.WriteLine("---Main component loading shared data---");
_forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
}
private async Task OnRefresh()
{
Console.WriteLine("---Pressed button Refresh---");
await Task.Delay(200);
}
protected override async Task OnInitializedAsync()
{
Console.WriteLine("OnInitializedAsync");
await base.OnInitializedAsync();
}
public override async Task SetParametersAsync(ParameterView parameters)
{
var objects = parameters.ToDictionary();
string parDescription = String.Join(", ",objects);
Console.WriteLine($"set:{parDescription}");
await base.SetParametersAsync(parameters);
}
protected override async Task OnParametersSetAsync()
{
Console.WriteLine("OnParametersSetAsync enter");
await base.OnParametersSetAsync();
// simulate some work
await Task.Delay(250);
Console.WriteLine("OnParametersSetAsync exit");
}
}

Liste