Прийшов час осідлати справжнього Буцефала🏇🏻Приборкай норовливого коня разом з Newxel🏇🏻Умови на сайті
×Закрыть

Events in Blazor

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Привіт!

Подивимось, як можна передати дані з одного компонента в інший. Для початку я створю дві кнопки, при натисканні яких будуть передаватись дані в інший компонент.

Button

Я створю компонент з назвою ThumbButton, який буде містити дві кнопки. В залежності, яка кнопка натиснута, буде викликатись відповідний метод і передавати дані в parrent-компонент. В @onclick вказується, який метод буде викликатись при настискані кнопки.

Для того, щоб передати дані в parrent-компонент, використовується властивість типу EventCallback<Thumb>, де Thumb — це enum. Замість enum може бути будь-який інший тип даних. У метод ThumbUp i ThumbDown викликаю OnVote.InvokeAsync, в який передається відповідний enum. Цей виклик передає дані в parrent-компонент.

<button class="btn btn-primary mx-2" @onclick="ThumbUp">
    <span class="oi oi-thumb-up"></span>
</button>

<button class="btn btn-danger mx-2" @onclick="ThumbDown">
    <span class="oi oi-thumb-down"></span>
</button>

@code {

    public EventCallback<Thumb> OnVote { get; set; }

    private void ThumbUp()
    {
        OnVote.InvokeAsync(Thumb.Up);
    }

    private void ThumbDown()
    {
        OnVote.InvokeAsync(Thumb.Down);
    }

    public enum Thumb
    {
        Up,
        Down
    }
}

Тепер цей компонент можна перевикористати на будь-якій сторінці.

Button Component on page

Тепер візьмемо сторінку Counter. І додамо щойно створений компонент з кнопкою. Розпочнемо з коду. Я створю дві властивості isThumbUp i isThumbDown типу bool. В залежності від того, яка властивість набуде значення true, відповідні дані будуть відображатись. Також якщо одна з цих властивостей набуде значення true, кнопка зникне.

Для того, щоб отримати дані з компонента кнопки, потрібен хендлер, який буде міняти значення isThumbUp i isThumbDown у відповідь на натискання кнопки <ThumbButton OnVote="OnVotedHandler"></ThumbButton>. Метод хендлер має приймати на вхід параметер типу який передається з кнопки. . В залежності від того яке значення прийшло на вхід встановлюється значення параметрів i .

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@if (isThumbUp)
{
    <p class="text-success">Your thumb is up</p>
}

@if (isThumbDown)
{
    <p class="text-danger">Your thumb is down</p>
}

@if (!isThumbDown && !isThumbUp)
{
    <div class="row">
        <div class="col-12">
            <ThumbButton OnVote="OnVotedHandler"></ThumbButton>
        </div>
    </div>
}

@code
{
    private bool isThumbUp = false;
    private bool isThumbDown = false;
    private void OnVotedHandler(ThumbButton.Thumb result)
    {
        if (result == ThumbButton.Thumb.Up)
        {
            isThumbUp = true;
        }
        else if (result == ThumbButton.Thumb.Down)
        {
            isThumbDown = true;
        }
    }
}

LinkedIn

Похожие статьи

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Это прекрасно, но не раскрывает тему взаимодействия компонентов.

А именно, что делать когда передаются данные между компонентами при глубокой вложенности на странице. Не упоминаются cascading values.

Также как оцениваете потенциал применения flux архитектуры в Blazor приложениях для управления состоянием? Работали с библиотеками Fluxer или подобным?

Ціль була описати базове використання івентів.

Щодо flux архітектур сказати нічого не можу, не доводилось використовувати. Мій профайл не .net developer, Blazor займаюсь в вільний час для себе

Подписаться на комментарии