Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме BlazorВсе вопросы
BlazorSeniorПроектирование систем

Как управлять состоянием в приложении Blazor?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Управление состоянием в Blazor строится на каскадных параметрах, scoped-сервисах, событиях через Action/EventCallback, PersistentComponentState для SSR и внешних хранилищах (Fluxor, localStorage) для сложных сценариев.

1. Локальное состояние компонента

Простейший вариант — поля компонента. Подходит для UI-состояния (открыт/закрыт дропдаун, текущая страница пагинации):

@code {
    private bool _isOpen;
    private int _page = 1;

    void Toggle() => _isOpen = !_isOpen;
}

Управление состоянием в Blazor

В Blazor нет встроенного единого решения вроде Redux или MobX — выбор стратегии зависит от области видимости и времени жизни состояния.

2. Передача через параметры и EventCallback

Стандартный Blazor-паттерн: данные вниз через [Parameter], события вверх через EventCallback:

@* ParentComponent.razor *@
<ChildComponent Value="_count" OnIncrement="HandleIncrement" />

@code {
    private int _count;
    void HandleIncrement() => _count++;
}

@* ChildComponent.razor *@
<button @onclick="() => OnIncrement.InvokeAsync()">+</button>

@code {
    [Parameter] public int Value { get; set; }
    [Parameter] public EventCallback OnIncrement { get; set; }
}

3. Каскадные параметры

Используются для состояния, которое нужно передать глубоко вниз по дереву (тема, локаль, аутентификация):

@* App.razor *@
<CascadingValue Value="_theme">
    <Router />
</CascadingValue>

@code { private string _theme = "dark"; }

@* Любой дочерний компонент *@
@code {
    [CascadingParameter] private string Theme { get; set; } = "light";
}

4. Scoped-сервис как State Container

Наиболее гибкий встроенный подход. Scoped-сервис живёт в рамках одной сессии (Server) или вкладки (WASM):

// AppState.cs
public class AppState
{
    public int CartItemCount { get; private set; }
    public event Action? OnChange;

    public void AddToCart()
    {
        CartItemCount++;
        OnChange?.Invoke();
    }
}

// Program.cs
builder.Services.AddScoped<AppState>();
@* CartIcon.razor *@
@implements IDisposable
@inject AppState State

<span>@State.CartItemCount</span>

@code {
    protected override void OnInitialized() =>
        State.OnChange += StateHasChanged;

    public void Dispose() =>
        State.OnChange -= StateHasChanged;
}

5. PersistentComponentState (SSR → Interactive)

При смешанном рендеринге (Static SSR + Interactive) данные нужно передать из SSR-фазы в интерактивную, чтобы избежать повторного запроса:

@inject PersistentComponentState AppState
@implements IDisposable

@code {
    private PersistingComponentStateSubscription _subscription;
    private List<Product>? _products;

    protected override async Task OnInitializedAsync()
    {
        _subscription = AppState.RegisterOnPersisting(Persist);

        if (!AppState.TryTakeFromJson<List<Product>>("products", out _products))
        {
            _products = await ProductService.GetAllAsync();
        }
    }

    private Task Persist()
    {
        AppState.PersistAsJson("products", _products);
        return Task.CompletedTask;
    }

    public void Dispose() => _subscription.Dispose();
}

6. Fluxor — Redux-подобное решение

// Установка
dotnet add package Fluxor.Blazor.Web

// State
[FeatureState]
public record CounterState(int Count = 0);

// Action
public record IncrementAction;

// Reducer
public static class CounterReducers
{
    [ReducerMethod]
    public static CounterState Reduce(CounterState state, IncrementAction _)
        => state with { Count = state.Count + 1 };
}

Подводные камни

  • В Blazor Server Scoped-сервис живёт на протяжении всей SignalR-сессии — не храните в нём большие объекты, иначе память сервера растёт без освобождения.
  • Подписка на OnChange без отписки в Dispose — классическая утечка памяти в Blazor; всегда реализуйте IDisposable.
  • Каскадные параметры по умолчанию сравниваются по ссылке — если передавать value-type или неизменяемую запись, используйте IsFixed="true" для оптимизации рендеринга.
  • В WASM Scoped-сервис фактически является Singleton на время жизни вкладки — проектируйте State Container с учётом этого.
  • PersistentComponentState данные сериализуются в HTML-страницу как JSON — не сохраняйте чувствительные данные (токены, пароли).
  • Fluxor удобен для крупных приложений, но для небольших SPA добавляет избыточную сложность — начинайте с State Container и мигрируйте по необходимости.

Частые вопросы на собеседовании

  • В чём разница между Blazor Server и Blazor WebAssembly?
  • Что такое Blazor и каковы его основные модели хостинга?
  • Как Blazor управляет повторным рендерингом компонентов и как его оптимизировать?
  • В каких типах frontend-проектов Blazor даёт реальный выигрыш, а где будет избыточен или неудачен?

Типичные ошибки

  • Путать состояние приложения между компонентами, сессиями и запросами с похожим механизмом из другой версии или платформы.
  • Игнорировать runtime-границы Blazor: lifecycle, DI scope, SQL translation, UI thread или platform API.
  • Не обсуждать null/empty/error cases и поведение под нагрузкой.

Что проверяет интервьюер

  • Кандидат объясняет состояние приложения между компонентами, сессиями и запросами на конкретном примере, а не только определением.
  • Указывает последствия для производительности, тестируемости и поддержки.
  • Различает документированное поведение текущего стека и устаревшие практики.

Как вы знаете этот вопрос?

Проверить себя по теме Blazor →

Источники

  • https://learn.microsoft.com/en-us/aspnet/core/blazor/state-management
←Предыдущий вопросЧто такое Blazor United / Blazor Web App, представленный в .NET 8?Следующий вопрос→Что такое режимы рендеринга в Blazor на .NET 8 (Static SSR, Interactive Server, Interactive WebAssembly, Auto)?

Связанные темы

Blazorruntime-reasoningsystem-design