asp.net 组件渲染流在Blazor中是如何工作的?

hpcdzsge  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(74)

我是blazor(dotnet 8)的新手,对组件渲染流程的工作方式感到困惑。
数据布局:

@if (currentSeason!=null && currentSeason.ActiveCategory.IsActive)
        {
            <CascadingValue Value="@currentSeason">
                <TTSWeb.Blazor.Components.Pages.Data.TeamsOnTop @rendermode="InteractiveServer" />
                @Body
            </CascadingValue>
        }
        @code {
            
            [CascadingParameter]
            RouteData RouteData { get; set; }
            public string? Slug { get; set; }
            public CurrentSeasonModel currentSeason { get; set; } = new();
        
            protected override async Task OnInitializedAsync()
            {
                if (RouteData.RouteValues.TryGetValue("Slug", out var slug) == true)
                {
        
                     
                   var results = await ttsClient.LatestSeasonsByCategory.ExecuteAsync(slug!.ToString());
                   if (results.IsSuccessResult())
                   {
                      // load data to currentSeason  
                    }        
                }
              
            }
    }

字符串
在TeamsOnTop组件上:

@if (currentSeason != null && currentSeason.ActiveCategory.IsActive)
{ 
    <p>load teams</p>
}
else
{
   <p>no data</p>
}
    @code {
    [CascadingParameter]
    public CurrentSeasonModel currentSeason { get; set; } = default!;
   }


应用程序先点击load teams,然后点击no data。所以我想知道它怎么可能用一个null currentSeason渲染TeamsOnTop?

jpfvwuh4

jpfvwuh41#

创建组件时,设置currentSession

public CurrentSeasonModel currentSeason { get; set; } = new();

字符串
我敢打赌:

// load data to currentSeason


执行currentSeason的双循环加载,结果是nullcurrentSeason.ActiveCategory.IsActivefalse
当操作是bool c并yields时,组件在bool测试变为false之前呈现和bool(并可能呈现)任何子组件。然后组件第二次呈现,条件为false,没有设置rendered。
我不知道你为什么要有条件地渲染@body,但你可能有自己的理由。

  • 建议 *:

您正在检查null,因此使用nullables,而不检查布局。

<CascadingValue Value="@currentSeason">
     <TTSWeb.Blazor.Components.Pages.Data.TeamsOnTop @rendermode="InteractiveServer" />
                @Body
  </CascadingValue>
@code {
            public CurrentSeasonModel? currentSeason { get; set; }
}


然后

@if (currentSeason != null && currentSeason.ActiveCategory.IsActive)
{ 
    <p>load teams</p>
}
else
{
   <p>no data</p>
}
    @code {
    [CascadingParameter]
    public CurrentSeasonModel? currentSeason { get; set; }
   }

相关问题