@ robsta имеет это исправление в комментариях, вы можете использовать OnParametersSet
для этого. Затем вы столкнетесь с другой проблемой, в которой каждый повторный запрос будет снова устанавливать ваши параметры и генерировать еще один вызов вашей службе. Я справился с этим, используя поле флага вместе с методом OnParametersSet
. Дайте этому шанс и доложите.
private bool firstRender = true;
protected override async Task OnParametersSetAsync()
{
if (pickedWeek.Number > 0 && firstRender)
{
dataFromService = await _injectedService.MakeACall(pickedWeek.Id);
firstRender = false;
// MAYBE call this if it doesn't work without
StateHasChanged();
}
}
Другой альтернативой является использование переопределения OnAfterRender
, которое обеспечивает firstRender
bool в сигнатуре метода, и вы можете сделать аналогичную логику c. Я предпочитаю первый способ, хотя, так как этот второй способ позволяет его визуализировать, THEN устанавливает значение вашего списка, THEN вызывает еще один повторный рендеринг, который кажется мне больше болтовней, чем мне нужно. Однако, если ваша задача долго выполняется, используйте эту вторую версию и создайте загрузочное сообщение, которое будет отображаться, пока список пуст, и другое, которое будет отображаться, если вызов службы завершится неудачно. «НЕИСПРАВНОСТЬ» немного вводит в заблуждение, поскольку она отображается до завершения вызова.
Я также обнаружил, что вызов на номер await Task.Delay(1);
, размещенный до вызова службы, может быть полезен, поскольку он прерывается. поток пользовательского интерфейса освобождается от ожидающего вызова службы и позволяет вашему приложению отображаться в состоянии загрузки, пока данные не вернутся.