OnInitializedAsync () в блазоре - PullRequest
3 голосов
/ 14 октября 2019

Я использовал OnInitializedAsync () в своем коде. В этом крюке я получаю данные. В разметке я проверил, являются ли данные нулевыми или нет. Но я обнаружил, что проверенные данные выполняются до срабатывания onInitalizedAsync (). Между тем, после получения данных также выполняется проверка данных.

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

<Component1>
  @if (Data != null)
      {
        @foreach (var item in Data) {
             <Component2>
        }
       }
</Componet1>

@code{
  protected override async Task OnInitializedAsync() {
       Data = //data from dataBase
  }
}

Мне нужно выполнять проверенные данные только после извлечения данных. Кто-нибудь может мне помочь решить эту проблему?

Заранее спасибо,

Кесаван

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Проверка данных должна выполняться в первую очередь, потому что что-то должно быть отрисовано перед методом OnInitializedAsync. Таким образом, если для загрузки данных OnInitializedAsync требуется много времени, пользователь уже видит что-то, а не только пустую страницу.

Почему вы хотите проверять данные только после извлечения данных?

В качестве обходного пути вы можете создать локальную переменную bool dataIsLoaded = false; и только после загрузки данных в OnInitializedAsync вы можете установить для нее значение true. Затем в проверке данных сделайте: @if (dataIsLoaded && Data != null)

0 голосов
/ 14 октября 2019

Я предполагаю, что Data относится к типу списка или массива. Обычно я инициализирую список или массив в OnInitialized и выполняю вызов в OnInitializedAsync. Поэтому проверка не требуется.

protected override void OnInitialized()
{
   Data = new List<Type>()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...