русский

Обсуждаем Blazor

268  
AlexNek патриот6 Tagen zurück, 19:30
AlexNek
6 Tagen zurück, 19:30 

начало здесь

"щас как раз на 8 все проекты

обёртка это самописные классы, которые ни от чего не зависят

они абстрагируют всякие вещи типа хранения введённых данных (числа, строки и т.п.), событий, принадлежности к форме (т.е. есть родитель-контейнер), гуевые коллеции (списки, деревья, таблицы) и т.п.

писаться они начали не так давно, так что сильно много там не было написано, сейчас ещё дальше дописываем"

#1 
AlexNek патриот6 Tagen zurück, 19:33
AlexNek
NEW 6 Tagen zurück, 19:33 
in Antwort AlexNek 6 Tagen zurück, 19:30
а у нас есть обёртки над ними - типа абстрагируемся от сторонних либ

Похоже у страха глаза велики.


А вы в курсе что с 8 версии блэзор ведет себя по другому, чем раньше?

#2 
alex445 патриот6 Tagen zurück, 19:44
NEW 6 Tagen zurück, 19:44 
in Antwort AlexNek 6 Tagen zurück, 19:33

А что зименилось?


Так-то я уже давно обновил версию, запустил по ф5 и всё запустилось.

#3 
AlexNek патриот6 Tagen zurück, 21:48
AlexNek
NEW 6 Tagen zurück, 21:48 
in Antwort alex445 6 Tagen zurück, 19:44
Так-то я уже давно обновил версию, запустил по ф5 и всё запустилось.

Довольно странно, тут версию не меняшь и то постоянная борьба


https://www.faciletechnolab.com/blog/a-comprehensive-explo...

#4 
alex445 патриот6 Tagen zurück, 22:05
NEW 6 Tagen zurück, 22:05 
in Antwort AlexNek 6 Tagen zurück, 21:48, Zuletzt geändert 6 Tagen zurück, 22:12 (alex445)

Чёт херня какая-то. Например


"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 это же часть хромиумного движка? Т.е. только в хромиумных браузерах будет поддерживаться. Лису рано или поздно закопают. Уже принесли лопаты. Раньше якоря надо было специально расставлять, а теперь можно сослаться даже на середину предложения.

#5 
AlexNek патриот5 Tagen zurück, 18:50
AlexNek
NEW 5 Tagen zurück, 18:50 
in Antwort alex445 6 Tagen zurück, 22:05
Остальное вроде не влияет на старый код

У меня на 11 страницах различия и проблемы расписаны смущ

Как минимум появилось 3 режима SSR, interactive Server, interactive client.

И полно вещей которые работают только в одном из этих режимов.

например:

OnAfterRenderAsync для SSR не вызывается

IJSRuntime для SSR не поддерживается

#6 
alex445 патриот5 Tagen zurück, 19:29
NEW 5 Tagen zurück, 19:29 
in Antwort AlexNek 5 Tagen zurück, 18:50, Zuletzt geändert 5 Tagen zurück, 19:30 (alex445)

OnAfterRenderAsync - я это использую, но вроде просто поменял версию в свойствах проекта и всё скомпилировалось всё равно без проблем. У нас серверный рендер, а какой точно из новомодных - не знаю.

#7 
AlexNek патриот5 Tagen zurück, 20:51
AlexNek
NEW 5 Tagen zurück, 20:51 
in Antwort alex445 5 Tagen zurück, 19:29
У нас серверный рендер, а какой точно из новомодных - не знаю

Можно было написать длинную тираду по этому поводу, но зная вас лучше промолчать. смущ

Вот чисто для примера

https://www.thinktecture.com/en/blazor/blazor-components-l...


и всё скомпилировалось всё равно без проблем.

а причем тут компиляция? Рендеринг происходит в процессе исполнения программы.

Я тоже не знаю отчего у вас всё без проблем работает, приходится подозревать только микрософт спок

Возможно просто при замене версии никакой особой замены и не происходит.

Где то у меня и примеры были которые многие проблемы демонстрируют, но нет пока времени искать, сорри.


#8 
alex445 патриот5 Tagen zurück, 23:35
NEW 5 Tagen zurück, 23:35 
in Antwort AlexNek 5 Tagen zurück, 20:51

А обязательно должно было сломаться у всех?


Хотя у нас не такие уж простые компоненты. Как минимум своё дерево классов компонентов с наследованиями и перезаписями некоторых обработчиков событий из этого lifecycle. И на это же дерево подобное же дерево обёрток и классов моделей.


А в чём проблема? ИИшке дал задание, и она починила.

#9 
AlexNek патриот4 Tage zurück, 18:43
AlexNek
NEW 4 Tage zurück, 18:43 
in Antwort alex445 5 Tagen zurück, 23:35
А обязательно должно было сломаться у всех

Это у меня подобная идея была смущ

Но получается неверная, если новые функции не включены - работает по старому. Тоже как идея смущ


ИИшке дал задание, и она починила.

фигвам, тут нет "чёткого" задания. Да и случайно проверил, была ошибка что кнопа не работала. Не додумалась, что рендеринг режим неверный.

#10 
AlexNek патриот4 Tage zurück, 18:52
AlexNek
NEW 4 Tage zurück, 18:52 
in Antwort AlexNek 4 Tage zurück, 18:43

вот можете поиграться? не уверен, что всё правильно, но будете удивлены тем что выводится, после нажатия на кнопку

<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");
    }
}
#11