.razor 파일과 .NET 코드만으로 구현됩니다.예전 웹에서는 버튼 하나 눌러도 전체 HTML을 다시 받아왔지만, SPA는 필요한 부분만 갱신함으로써 성능과 UX를 향상시킵니다.
Blazor에서 레이아웃은 공통 UI(메뉴, 헤더 등)를 재사용하는 방식으로 제공됩니다.
@inherits LayoutComponentBase
<div class="sidebar">
<p style="color : #be0000;">a</p>
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">c
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
</div>
<div class="content px-4">d
@Body
</div>
</div>
@Body는 해당 Layout에 표시될 페이지 콘텐츠를 삽입하는 자리입니다.@inherits LayoutComponentBase는 해당 컴포넌트가 Layout이라는 것을 명시합니다.@layout MainLayout2_Imports.razor에 @layout MainLayout2 작성App.razor에서 DefaultLayout="@typeof(MainLayout)"<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
Found: URL이 일치할 때 보여줄 컴포넌트NotFound: 없는 주소 요청 시 보여줄 컴포넌트DefaultLayout: 해당 라우터의 기본 레이아웃 지정Blazor의 라우터는 내부적으로도
RenderFragment를 사용하여 렌더링 로직을 구현합니다.
NavMenu.razor에 존재하는 메뉴는 다음과 같이 구성됩니다:
<NavLink class="nav-link" href="counter">
<span class="oi oi-plus"></span> Counter
</NavLink>
NavLink는 href와 유사하지만, 현재 선택된 경로에 대한 스타일 지정 기능이 추가됩니다.@inject NavigationManager navManager
<button class="btn btn-primary" @onclick="GoToFetchData">Go</button>
@code {
private void GoToFetchData()
{
navManager.NavigateTo("fetchdata");
}
}
라우팅 경로에 파라미터를 포함할 수 있습니다.
@page "/counter"
@page "/counter/{CurrentCount:int}"
@code {
[Parameter]
public int CurrentCount { get; set; }
private void IncrementCount() => CurrentCount++;
}
/counter/30으로 접근하면 CurrentCount에 30이 전달됩니다.:int, :string 등)