Blazor is a free and open-source web framework that enables developers to create web apps using C# and HTML. It is being developed by Microsoft.
-
Blazor๋ HTML, CSS๋ฅผ ์ด์ฉํด ์น UI๋ฅผ ๊ตฌ์ฑํ๊ณ , Javascript๋์ C#์ ์ด์ฉํ ๋์ ์น UI๋ฅผ ๋น๋ํ ์ ์๋ .NET Framework์์ ์ ๊ณตํ๋ ASP.NET Core์ ์ฌ์ฉํ๋ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋ ์น ํ๋ ์์ํฌ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ HTML๊ณผ C#์ ๊ฒฐํฉ์ผ๋ก ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ธ๋ฉํ๊ณ , UI์ ๋ฐ์ดํฐ๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ ์ ์์ต๋๋ค.
๋ธ๋ ์ด์ ๋ ์คํ ์์ค์ด๋ฉฐ ์ฌ๊ธฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Blazor์๋ ๋ ๊ฐ์ง์ ํธ์คํ ๋ชจ๋ธ์ด ์์ต๋๋ค.
-
- WASM๋ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ด ์๋ฒ์ ๋ํ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด์ ธ๋ ํด๋ผ์ด์ธํธ ์ฑ์ ์คํ๋ผ์ธ์์๋ ๊ณ์ ์๋ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ์ ์ปดํจํฐ์์ ์คํ๋๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด์ ์๋ฒ๋ก๋๊ฐ ํฌ๊ฒ ์ค์ด ๋ญ๋๋ค.
- WASM์ ๋ฐ์คํฌํฑ ๋ฐ ๋ชจ๋ฐ์ผ์ ๋ชจ๋ ์ต์ ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๋ค.
- WASM์ ๋ณด์ ์๋๋ฐ์ค ๋ด ์ฌ์ฉ์ ์ฅ์น์์ ์คํ๋ฉ๋๋ค.
- WASM์ ์๋ฒ ๊ตฌ์ฑ ์์์์ด ์ ์ ์ฌ์ดํธ๋ก ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. (API ์ ์ธ)
- blazor.webassembly.js ํ์ํ ๋ชจ๋ .NET DLL ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํ๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ ์์ ์๊ฐ์ด ์๋ฒ ์ชฝ๋ณด๋ค ๋๋ ค์ง๋๋ค.
-
- Server์ธก์ HTML์์ค๊ฐ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์ WASM๋ณด๋ค ๋น ๋ฅธ ๋ก๋ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- C# ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋์ง ์๊ณ , ์๋ฒ์ธก์์ ์คํ๋๊ธฐ ๋๋ฌธ์ Visual Studio๋ฅผ ํตํ .NET ์ฝ๋ ๋๋ฒ๊น ์ด ์ ํ์ด ์ ์ต๋๋ค.
- WASM์ ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ IE 11๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ์ง ์์ง๋ง, Server์ธก์ ์ง์ํฉ๋๋ค.
- Server์ธก์ ํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ด ์ธ์ ์ ์ค์ ํ๊ณ SignalR์ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ์คํ๋๋ .NET๊ณผ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํต์ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฌ์ฉ๋์ ๋ชจ๋ ์ฌ์ฉ์์ ๋ํ ์๋ฒ ๋น์ฉ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
-
Blazor์ ์์๊ฐ๋ฉด์ ์์ผ๋ก SignalR์ด๋ ์ด๋ฆ์ ์์ฃผ ๋ง์ฃผํ๊ฒ ๋ ๊ฒ ์
๋๋ค.
๊ทธ๋์ ๋จผ์ ์ค๋ช ์ ํ์๋ฉด SignalR์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค์๊ฐ ์น ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๋ ASP.NET ๊ฐ๋ฐ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
์ค์๊ฐ ์น ๊ธฐ๋ฅ์ด๋ ์๋ฒ ์ธก์ ์ฝ๋๊ฐ ์ค์๊ฐ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ๋๋ ์ฆ์ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ์ ํธ์๋๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ด ์คํ์์ค๋ Blazor๋ฅผ ์์๋ณด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ ์ด์ ๋๋ก ๊ฐ๋จํ ์ค๋ช ํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
SignalR ๋ํ ์คํ์์ค์ด๋ฉฐ MSDN๊ณผ GitHub๋ฅผ ํตํด ๋์ฑ ์์ธํ ์ ๋ณด๋ฅผ ์์๋ณผ ์ ์์ต๋๋ค.
Blazor Server์ Blazor WASM์ ๋ชจ๋ ์ฅ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๋ชฉ์ ์ ๋ง๊ฒ ์ ํํ๋ฉด ๋ฉ๋๋ค.
๋ง์ ์์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ฉฐ, ๋ฏผ๊ฐํ ์ฝ๋๊ฐ ์์ด ์จ๊ธฐ์ง ์๋ ๊ฒฝ์ฐ - WASM
์ฑ๋ฅ์ด ์ค์ํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ์คํํ์ง์๊ณ ์ถ์ ๋ฏผ๊ฐํ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ - Server
- Blazor ํ์์ฌํญ
- Blazor ํ๋ก์ ํธ ๊ตฌ์กฐ
- Blazor Layout
- Blazor Components
- Blazor Binding
- Blazor Parameter
- Blazor Routing
- Blazor JavaScript
- Blazor Dependency Inject
- Blazor Entity Framework
- Blazor Authorize
TBD...
์์ ๋จ๊ณ๋ Blazor Server ํ๋ก์ ํธ๋ก ์งํ๋ฉ๋๋ค. (์ถํ์ WASM ์ถ๊ฐํ ์์ ์ ๋๋ค.)
-
์ด ๊ธ์ Windows10 Visual Studio 2019๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ ๊ธ์ ๋๋ค.
-
Blazor Server์ ๊ธฐ๋ณธ์ ์ผ๋ก ASP.NET CORE์ ๊ตฌ์กฐ์ ๋์ผํฉ๋๋ค.
-
์ฑ์ ์์ ๋ ผ๋ฆฌ๋ฅผ ํฌํจํ๋ ํด๋์ค์ ๋๋ค. StartUp ํด๋์ค๋ ์์ฑ ์์ ๋ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค.
-
ConfigureServices: ์ฑ์ DI(Depedency Inject) ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. (ex: DBContenxt, Authorize, API, Service ๋ฑ) Blazor Server์์๋ AddServerSideBlazor ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค(AddSigleton , AddScoped, AddTransient)๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก Service๊ฐ ์ถ๊ฐํ๋ฉด ์ฑ์ Service ์ปจํ ์ด๋์ ์ถ๊ฐ๋๋ฉด์ Component์์ Service๋ฅผ Injectํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
Configure: ์ฑ์ ์์ฒญ ์ฒ๋ฆฌ ํ์ดํ ๋ผ์ธ์ ๊ตฌ์ฑํฉ๋๋ค.
์ด๊ธฐ StartUp.cs์ ์์ค๋ ์๋์ ๊ฐ์ต๋๋ค.
Startup.cs
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); // ์ฑ์ Dependency Inject ์ข ์์ฑ ์ฃผ์ -- ์ด ๊ฐ๋ ์ ์๋์ ์ค๋ช ๋ฉ๋๋ค. services.AddSingleton<WeatherForecastService>(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { // ์ฑ์์ ์ค๋ฅ๊ฐ ๋ฐ์๋์ ๋ ํ๋ฉด app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { // ๋ธ๋ผ์ฐ์ ์์ ์ค์๊ฐ ์ฐ๊ฒฐ์ ์ํ ์๋ ํฌ์ธํธ๋ฅผ ์ค์ ํ๊ธฐ ์ํด ํธ์ถ๋ฉ๋๋ค. ์ฐ๊ฒฐ์ SignalR๋ก ์์ฑ๋ฉ๋๋ค. endpoints.MapBlazorHub(); // ์ฑ์ ๋ฃจํธ ํ์ด์ง๋ฅผ ์ค์ ํ๊ณ ํ์์ ํ์ฑํํฉ๋๋ค. endpoints.MapFallbackToPage("/_Host"); }); } }
-
-
ํ๋ก์ ํธ์ ๋ํ ์ง์ ์ ์ธ ๋ฉ์๋๋ฅผ ํฌํจํ ํด๋์ค์ ๋๋ค. ASP.NET Core๋ฅผ ํธ์คํธํฉ๋๋ค.
-
Blazor ์ฑ์ ๊ตฌ์ฑํ๋ ๋ผ์ฐํ ๊ฐ๋ฅํ Razor ํ์ด์ง์ Blazor ์๋ฒ ์ฑ ๋ฃจํธ Razor ํ์ด์ง๊ฐ ํฌํจ๋ฉ๋๋ค.
๊ฐ ํ์ด์ง์ ๊ฒฝ๋ก๋ @page ์ง์๋ฌธ์ ์ด์ฉํด ์ง์ ํ ์ ์์ต๋๋ค. ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
@page "/๊ฒฝ๋ก์ด๋ฆ"
Blazor Server ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ ๋ Pages์ ํด๋์ ํ ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- _Host.cshtml: Razor ํ์ด์ง๋ก ๊ตฌํ๋ ์ฑ์ ๋ฃจํธ ํ์ด์ง ์
๋๋ค
- ์ฑ์ ํ์ด์ง๊ฐ ์ฒ์ ์์ฒญ๋๋ฉด ์ด ํ์ด์ง๊ฐ ๋ ๋๋ง๋๋ฉฐ ์๋ตํฉ๋๋ค.
- ๋ฃจํธ App์ ๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง ๋๋ ์์น๋ฅผ ์ง์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก
_framework/blazor.server.js
Javascript ํ์ผ์ด ๋ก๋๋๋ฉฐ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ์ ์ค์๊ฐ SignalR ์ฐ๊ฒฐ์ ์ค์ ํ๋ JS์ ๋๋ค. - ์๋ก ์์ฑํ jsํน์ css, Api ์ฉ๋์ js ๋ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- Counter.razor: Blazor ๊ตฌ์ฑ์์ Razor ํ์ด์ง๋ฅผ ํตํด ์นด์ดํธ ์ฆ๊ฐ๊ฐ ๊ตฌํ๋ ํ์ด์ง์ ๋๋ค.
- Error.cshtml: App์์ ์ฒ๋ฆฌ๋์ง ์์ ์์ธ๊ฐ ๋ฐ์ํ ๋ ๋ ๋๋ง ๋ฉ๋๋ค.
- FetchData.razor: StartUp.cs์์ DI๋ก ๋ฑ๋ก๋ Service๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๊ตฌํ๋ ํ์ด์ง์ ๋๋ค.
- Index.razor: ํ ํ์ด์ง๋ฅผ ๊ตฌํํ ํ์ด์ง์ ๋๋ค. ์ฌ๋ ๋ค๋ฅธ ์น ๊ฐ๋ฐ Index ํ์ด์ง์ ๊ฐ์ต๋๋ค.
- _Host.cshtml: Razor ํ์ด์ง๋ก ๊ตฌํ๋ ์ฑ์ ๋ฃจํธ ํ์ด์ง ์
๋๋ค
-
๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ฐ์ง ํ์ผ์ ๋๋ค.
- ASP.NET Core์ launchSettings.json ํ์ผ๊ณผ ๊ฐ์ผ๋ฉฐ ์์คํ ํ๊ฒฝ์ ์ค์ ๋ ๊ฐ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
- ๋ก์ปฌ ๊ฐ๋ฐ ๋จธ์ ์์๋ง ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐฐํฌ๋์ง ์์ต๋๋ค.
- ์ฌ๋ฌ๊ฐ์ง ํ๋กํ ์ค์ ์ด ํฌํจ๋์ด ์์ต๋๋ค.
-
razorํ์ด์ง์์ ์ฌ์ฉํ๋ ๊ณตํต UI ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค.
- MainLayout.razor: ์ฑ์ ๋ ์ด์์ ๊ตฌ์ฑ ์์ ์ ๋๋ค. ์๋์ ์์ธํ ์ค๋ช ์ด์์ต๋๋ค.
- NavMenu.razor: ์ฌ์ด๋ ๋ฐ Navigation์ ๊ตฌํํฉ๋๋ค. ๋ค๋ฅธ Razor ์์์์ ๋ํ ํ์ ๋งํฌ๋ฅผ ๋ ๋๋ง ํ๋ NavLink๋ฅผ ํฌํจํฉ๋๋ค. ASP.NET Core์ NavLink์ ๊ฐ์ผ๋ฉฐ ์ฌ์ฉ์๊ฐ ํ์๋ ํ์ ๋งํฌ ์ค ์ด๋ค ํ์ด์ง๊ฐ ํ์ฑ ํ์ด์ง์ธ์ง์ ์ ์์ผ๋ฉฐ, NavLink.ActiveClass์ CSS ํด๋์ค์ ์ด๋ฆ์ ํ ๋นํ์ฌ ๋ฐ์ดํฐ์ ๋น๊ตํด ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
-
.razor์ ๊ฐ์ ์ฑ์ ๊ตฌ์ฑ์์์ ํฌํจํ ๊ณตํต ๋ค์์คํ์ด์ค์ ๋ํ
@Using
์ง์๋ฌธ์ ํฌํจํฉ๋๋ค. -
์ผ๋ฐ์ ์ผ๋ก๋ Database์ ๊ด๋ฆฌ๋ฅผ ์ํ ํด๋์ ๋๋ค. Blazor Server์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
- WeatherForecast.cs: Property ๊ตฌ์ฑ์์๋ฅผ ๋ด์ ํด๋์ค
- WeatherForecastService.cs: Data๋ฅผ ๊ฐ์ ธ์ค๋ Task ๋ฉ์๋๋ฅผ ๋ด์ ํด๋์ค
-
์ฑ์ ๊ณต๊ฐ ์ ์ ์์๋ค์ด ํฌํจ๋ Web root์ ๋๋ค.
-
์ฑ์ ๊ตฌ์ฑ ์ค์ ์ ์ ์ฅํ ํ์ผ์ ๋๋ค.
- IConfiguration ์ธ์คํด์ค๋ฅผ Razor ๊ตฌ์ฑ ์์์ ์ฝ์ ํด ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- API, Authorize, DataBase ConnectionString ๋ฑ์ ์ธ์ฆ์ ๊ตฌ์ฑํฉ๋๋ค.
-
-
๋ธ๋ ์ด์ ๋ก ํ๋ก์ ํธ๋ฅผ ์ฒ์ ์์ฑํ๋ฉด Sharedํ์ผ์ MainLayout.razor์์ ์์ค์ฝ๋๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์ Page์ Layout Template์ ์์ฑํ ์ ์์ต๋๋ค.
Blazor Layout์ ๋ชจ๋ ์ฝํ ์ธ ๋ LayoutComponent Class์ ํ์ ํญ๋ชฉ ์ฐ์ ๋๋ค.
Blazor Layout์ Index.razor ํ์ด์ง ๋ด์์ ์ ์ ๋ ๋ถ๋ถ๋ง ์๋ ๋ฉ๋๋ค. (Blazor Server๋ง ํฌํจ)MainLayout.razor
@inherits LayoutComponentBase <div class="sidebar"> <NavMenu /> </div> <div class="main"> <div class="top-row px-4"> <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a> </div> <div class="content px-4"> @Body //์ด๊ณณ์ Index.razor๋ด์ ์ ์๋ HTML๋ค์ด ๋ค์ด๊ฐ๋๋ค. </div> </div>
-
Component๋ C# HTML ํ๊ทธ ์กฐํฉ์ผ๋ก Blazor Razor ๊ตฌ์ฑ ์์ ํ์ผ๋ก ๊ตฌํํ๋ ๊ฒ ์ ๋๋ค.
-
-
Blazor์ Razor ๊ตฌ์ฑ ์์๋ Razor ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. Razor ๊ตฌ๋ฌธ์ ์ต์ํ์ง ์๋ค๋ฉด MSDN Razor ๊ตฌ๋ฌธ ์ฐธ์กฐ์ ์ฐธ๊ณ ํ๋๊ฒ ์ข์ต๋๋ค.
-
Component์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ ํด์ผ๋ฉ๋๋ค. ex) BlazorComponent.razor
-
Blazor์ ๋ผ์ฐํ ์ ์ฑ์์ ์ก์ธ์ค ํ ์ ์๋ ๊ฐ ๊ตฌ์ฑ ์์์ ๊ฒฝ๋ก ํ ํ๋ฆฟ์ ์ ๊ณตํ์ฌ ์ํ๋ฉ๋๋ค.
@page ์ง์๋ฌธ์ด ์๋ Razor ํ์ผ์ด ์ปดํ์ผ๋๋ฉด ์์ฑ ๋ ํด๋์ค์ ๊ฒฝ๋ก ํ ํ๋ฆฟ์ ์ง์ ํ๋ RouteAttribute ๊ฐ ์ ๊ณต๋ฉ๋๋ค. ๋ฐํ์์ ๋ผ์ฐํฐ๋ RouteAttribute๊ฐ ์๋ Component์ ํด๋์ค๋ฅผ ์ฐพ๊ณ ์์ฒญ ๋ URL๊ณผ ์ผ์นํ๋ ๊ฒฝ๋ก์ Component๋ฅผ ๋ ๋๋งํฉ๋๋ค.
BlazorComponent.razor
@page "/BlazorComponent"
-
Component์ UI๋ HTML์ ์ฌ์ฉํ์ฌ ์ ์๋ฉ๋๋ค. Razor๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ C# ๊ตฌ๋ฌธ์ ์ด์ฉํ ๋์ ๋ ๋๋ง ๋ ผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฑ์ด ์ปดํ์ผ๋๋ฉด HTML ํ๊ทธ์ C# ๋ ๋๋ง ๋ ผ๋ฆฌ๊ฐ Component์ ํด๋์ค๋ก ๋ณํ๋ฉ๋๋ค.
Component ํด๋์ค์ ๊ตฌ์ฑ์ @code ๋ธ๋ก ๋ด์์ ์ ์๋ฉ๋๋ค.
@code ๋ธ๋ก์์๋ Property, Fields ๋ฑ๊ณผ ๊ทธ๊ฒ๋ค์ ์ฒ๋ฆฌํ๋ Event์ Method๋ค์ ํฌํจ ํฉ๋๋ค.
๋ค์์ ๋์ ๋ ๋๋ง ์ ์ ๋๋ค.
DynamicRender.razor
<div class="@(visibllity ? "visible" : "collapse")"> @text1 </div> @code{ private bool visibllity { get; set;} = false; private string text1 { get; set; } = "my sample text."; }
-
Component์ ๋ค์ ์คํ์ด์ค๋ ์ฑ์ ๋ฃจํธ ๋ค์ ์คํ์ด์ค์ ์ฑ ๋ด ๊ตฌ์ฑ ์์์ ์์น์์ ํ์๋ฉ๋๋ค. ์ฑ์ ๋ฃจํธ ๋ค์ ์คํ์ด์ค๊ฐ
BlazorTutorial
์ด๊ณ ๊ตฌ์ฑ ์์ ํ์ผ์ดPages
์ ์๋ ๊ฒฝ์ฐ- BlazorTutorial.Pages์ด๋ ๋ค์ ์คํ์ด์ค๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ ์ฌ์ฉ์ ์ง์ ํด๋์ @using์ ๊ฒฝ์ฐ ๋ถ๋ชจ ๊ตฌ์ฑ ์์ ๋๋ ์ฑ์ _Imports.razor ํ์ผ์ ์ง์๋ฌธ์ ์ถ๊ฐ ํฉ๋๋ค.
-
Razor ๊ตฌ์ฑ ์์๋ C# ์ฝ๋๋ฅผ 2๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ ์ํ ์ ์์ต๋๋ค.
- Razor ์ฝ๋์ HTML ํ๊ทธ๊ฐ ์๋ Razor ๊ตฌ์ฑ์์์ @code ๋ธ๋ก ์ ๋ง๋ค์ด ์์ C# ์ ์ ์
Pages/Counter.razor
<div class="@(visibllity ? "visible" : "collapse")"> @text1 </div> @code{ private int currentCount = 0; void PlusCount() { currentCount++; } }
- ์ฝ๋ ์จ๊น ํ์ผ์ ๋ง๋ค์ด C# ์ ์ ์ (Razorํ์ผ์ด ์๋ ํด๋์ ๋์ผํ ์ด๋ฆ์ ํด๋์ค๋ฅผ .razor๋ฅผ ํฌํจํด ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.)
Pages/Counter.razor
<div class="@(visibllity ? "visible" : "collapse")"> @text1 </div>
Pages/Counter.razor.cs
@code{ namespace BlazorTutorial.Pages { public partial class Counter { private int currentCount = 0; void PlusCount() { currentCount++; } }, }
-
Razor ํ์ผ ์์ @inherits Attribute๋ฅผ ํตํด ํด๋์ค๋ฅผ ์์ ๋ฐ์ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
-
Component๋ฅผ ์์ฑํ๋ฉด ๋ถ๋ชจ Component์์ ์์ Component์ ๋ํด Parameter๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
Pages/Parent.razor.cs
<Child childParmas = 123 />
Pages/Child.razor.cs
<div> @childParamas.ToString() </div> @code{ [Parameter] Public int childParams { get; set; } }
-
-