Обновление списка предметов в Blazor из другой ветки - PullRequest
5 голосов
/ 08 марта 2020

Я пытаюсь получить список элементов для обновления при получении сообщения из очереди сообщений.

Кажется, это работает только каждый другой при получении сообщения, хотя , Это определенно бьет по анонимному методу внутри вызова SubscribeAsync каждый раз, и я не могу понять, почему он не обновляется каждый раз. Я предполагаю, что это связано с тем, что анонимный метод находится в другом потоке. Есть идеи, что я делаю не так?

@page "/"
@inject IMessageQueueHelperFactory MessageQueueHelperFactory
@inject ILogger<Index> Logger
@using Microsoft.Extensions.Logging
@using Newtonsoft.Json

<ul class="list-group">
    @foreach (var user in Users) {
        <li class="list-group-item">@user</li>
    }
</ul>

@code
{
    private List<string> Users { get; set; } = new List<string>();

    protected override void OnInitialized()
    {
        MessageQueueHelperFactory.Create(Queues.UserRegistration)
            .SubscribeAsync(async x =>
            {
                var user = JsonConvert.DeserializeObject<UserRegistrationData>(x);
                Users.Add(user.Username);
                await InvokeAsync(StateHasChanged);
            });

        base.OnInitialized();
    }
}

1 Ответ

7 голосов
/ 09 марта 2020

Из документации Microsoft я наткнулся на эту статью: Методы инициализации компонента

В нем говорится, что:

Приложения сервера Blazor, которые преобразуют свой контент, вызывают OnInitializedAsyn c дважды

  • Один раз, когда компонент изначально отображается статически как часть страницы.

  • Второй раз, когда браузер устанавливает подключение обратно к серверу.

Итак, я полагаю, если вы используете OnAfterRenderAsyn c с первым параметром, установленным в true, решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...