Blazor Server-side로 제작된 손전등 애플리케이션
14786 단어 Blazor
Blazor Server-side 앱을 통해 특정 페이지(URL)에 연결된 스마트폰 화면을 원격으로 조작할 수 있을 것으로 생각한다.
제작 영상 왼쪽: 관리 화면 오른쪽: 연결된 스마트폰 화면(실제 화면 지연 없음)
동적 스타일 변경
Blazer 탭에서 동적 변수를 사용할 수 있습니다.즉, 동적으로 classセレクタ
과style
의 내용을 변경할 수 있다.값을 수정한 후 StateHasChangedメソッド
라는 이름으로 DOM을 재구성하고 페이지를 생성할 수도 있습니다.이 구조는 변화CSS
할 수 있을 뿐만 아니라 동적 생성 제어도 할 수 있다. 이런 부분은 JavaScriptレス
에 쓰일 수 있어 Blazor의 흥분되는 부분이다!
class 선택기와 스타일을 되돌려줍니다.
<div class=@GetClass style=@GetStyle>
</div>
@code{
bool alarm = false;
string GetClass()
{
return "main";
}
string GetStyle()
{
if(alarm)
{
return "warn";
}
else
{
return "normal";
}
}
}
이런 것도 오케이.
css 파일의 스타일을 수정할 수 없지만, 내연 style
의 내용이라면 동적 설정을 할 수 있습니다.<style>
.test{
@styleStr
}
</style>
<div class="test">
<p>Hello World</p>
</div>
@code{
string styleStr = "color:black;";
void SetColor(string colorName)
{
styleStr = "color:" + colorName + ";";
}
}
나는 이 특성을 활용하여 짧은 인코딩의 진기한 응용을 만들고 싶다.
색상 관리 클래스
모든 세션에서 공유된 색상만 유지하는 클래스를 만듭니다.상태 변화 중 임의의 이벤트를 실행할 수 있도록 처리 프로그램을 준비했다.public class ColorClass
{
private string _colorStr = "";
public string ColorStr
{
get
{
return _colorStr;
}
set
{
_colorStr = value;
this.StateChanged?.Invoke(this, EventArgs.Empty);
}
}
public event EventHandler StateChanged;
}
Startup.cs 편집
프로그램을 시작할 때, 단일 그룹에서 색 관리 클래스를 생성합니다.
Startup.cs
public class Startup
{
// 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();
services.AddSingleton<WeatherForecastService>();
//シングルトンでインスタンスを生成
services.AddSingleton<ColorClass>();
}
}
MainLayout.razor 편집 MainLayout.razor
여분의 부분을 제거하고 @Body
만 표시합니다.색상 관리 클래스Inject
를 설정하고 1차 변경 값을 계기로 호출StateHasChangedメソッド
을 하여 화면을 생성한다.
MainLayout.razor@inherits LayoutComponentBase
@inject ColorClass colorCls;
@*子コンテンツにカスケードでインスタンスを渡す*@
<CascadingValue Value="@colorCls" Name="Color">
@Body
</CascadingValue>
@code{
protected override void OnInitialized()
{
//値変更で、画面の再生成を行う
colorCls.StateChanged += (s,e) =>
{
this.InvokeAsync(this.StateHasChanged);
};
}
}
색상을 변경할 수 있는 화면(Manage.razor)
색상을 수정할 수 있는 관리 화면을 만듭니다./manage
에 액세스하면 이 화면이 표시됩니다.id:main
에 비해 변경background-Color
을 통해 전체 페이지의 배경색을 동적으로 바꿀 수 있다.
Manage.razor@page "/manage"
<div id="main" style=@colorClass.ColorStr>
<div class="content-row">
@foreach(var colorName in ColorNames)
{
<button class="btn " style="background-color:@colorName;width:150px"
@onclick=@(_=>SetStyle(colorName))>@colorName</button>
}
</div>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
string[] ColorNames = new string[0];
protected override void OnInitialized()
{
// ConsoleColorから色名を取得
ColorNames = Enum.GetNames(typeof(ConsoleColor));
}
void SetStyle(string name)
{
// ここの変更で、背景色が変わる
colorClass.ColorStr = "background-Color:" + name;
}
}
클라이언트 화면(Index.razor)
조작된 한쪽은 /
방문할 때 표시되는 화면이다.관리 화면과 마찬가지로 동적 변경 가능ID:main
의background-Color
.
Index.razor@page "/"
<div id="main" style=@colorClass.ColorStr>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
}
최후
Blazor Server-side 애플리케이션은 세션SignalR
의 상태 변화가 발생할 때마다 데이터 전송을 하지만 변경된 부분만 전송하기 때문에 전송량이 크지 않다.예를 들어 이 응용 프로그램의 경우 색의 변화로 인해 연결된 목적지로 전송되는 정보량은 약 100Byte이다.
이번에는 언뜻 보기에는 JavaScript
의 앱을 사용한 것 같지만 JavaScriptレス
로 쓸 수 있다!그리고 놀랍게도 인코딩이 적은 부분은 블레이저의 장점
Reference
이 문제에 관하여(Blazor Server-side로 제작된 손전등 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kimuradesu/items/4f4456bb8e4f563bb0e1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<div class=@GetClass style=@GetStyle>
</div>
@code{
bool alarm = false;
string GetClass()
{
return "main";
}
string GetStyle()
{
if(alarm)
{
return "warn";
}
else
{
return "normal";
}
}
}
<style>
.test{
@styleStr
}
</style>
<div class="test">
<p>Hello World</p>
</div>
@code{
string styleStr = "color:black;";
void SetColor(string colorName)
{
styleStr = "color:" + colorName + ";";
}
}
모든 세션에서 공유된 색상만 유지하는 클래스를 만듭니다.상태 변화 중 임의의 이벤트를 실행할 수 있도록 처리 프로그램을 준비했다.
public class ColorClass
{
private string _colorStr = "";
public string ColorStr
{
get
{
return _colorStr;
}
set
{
_colorStr = value;
this.StateChanged?.Invoke(this, EventArgs.Empty);
}
}
public event EventHandler StateChanged;
}
Startup.cs 편집
프로그램을 시작할 때, 단일 그룹에서 색 관리 클래스를 생성합니다.
Startup.cs
public class Startup
{
// 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();
services.AddSingleton<WeatherForecastService>();
//シングルトンでインスタンスを生成
services.AddSingleton<ColorClass>();
}
}
MainLayout.razor 편집 MainLayout.razor
여분의 부분을 제거하고 @Body
만 표시합니다.색상 관리 클래스Inject
를 설정하고 1차 변경 값을 계기로 호출StateHasChangedメソッド
을 하여 화면을 생성한다.
MainLayout.razor@inherits LayoutComponentBase
@inject ColorClass colorCls;
@*子コンテンツにカスケードでインスタンスを渡す*@
<CascadingValue Value="@colorCls" Name="Color">
@Body
</CascadingValue>
@code{
protected override void OnInitialized()
{
//値変更で、画面の再生成を行う
colorCls.StateChanged += (s,e) =>
{
this.InvokeAsync(this.StateHasChanged);
};
}
}
색상을 변경할 수 있는 화면(Manage.razor)
색상을 수정할 수 있는 관리 화면을 만듭니다./manage
에 액세스하면 이 화면이 표시됩니다.id:main
에 비해 변경background-Color
을 통해 전체 페이지의 배경색을 동적으로 바꿀 수 있다.
Manage.razor@page "/manage"
<div id="main" style=@colorClass.ColorStr>
<div class="content-row">
@foreach(var colorName in ColorNames)
{
<button class="btn " style="background-color:@colorName;width:150px"
@onclick=@(_=>SetStyle(colorName))>@colorName</button>
}
</div>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
string[] ColorNames = new string[0];
protected override void OnInitialized()
{
// ConsoleColorから色名を取得
ColorNames = Enum.GetNames(typeof(ConsoleColor));
}
void SetStyle(string name)
{
// ここの変更で、背景色が変わる
colorClass.ColorStr = "background-Color:" + name;
}
}
클라이언트 화면(Index.razor)
조작된 한쪽은 /
방문할 때 표시되는 화면이다.관리 화면과 마찬가지로 동적 변경 가능ID:main
의background-Color
.
Index.razor@page "/"
<div id="main" style=@colorClass.ColorStr>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
}
최후
Blazor Server-side 애플리케이션은 세션SignalR
의 상태 변화가 발생할 때마다 데이터 전송을 하지만 변경된 부분만 전송하기 때문에 전송량이 크지 않다.예를 들어 이 응용 프로그램의 경우 색의 변화로 인해 연결된 목적지로 전송되는 정보량은 약 100Byte이다.
이번에는 언뜻 보기에는 JavaScript
의 앱을 사용한 것 같지만 JavaScriptレス
로 쓸 수 있다!그리고 놀랍게도 인코딩이 적은 부분은 블레이저의 장점
Reference
이 문제에 관하여(Blazor Server-side로 제작된 손전등 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kimuradesu/items/4f4456bb8e4f563bb0e1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class Startup
{
// 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();
services.AddSingleton<WeatherForecastService>();
//シングルトンでインスタンスを生成
services.AddSingleton<ColorClass>();
}
}
MainLayout.razor
여분의 부분을 제거하고 @Body
만 표시합니다.색상 관리 클래스Inject
를 설정하고 1차 변경 값을 계기로 호출StateHasChangedメソッド
을 하여 화면을 생성한다.MainLayout.razor
@inherits LayoutComponentBase
@inject ColorClass colorCls;
@*子コンテンツにカスケードでインスタンスを渡す*@
<CascadingValue Value="@colorCls" Name="Color">
@Body
</CascadingValue>
@code{
protected override void OnInitialized()
{
//値変更で、画面の再生成を行う
colorCls.StateChanged += (s,e) =>
{
this.InvokeAsync(this.StateHasChanged);
};
}
}
색상을 변경할 수 있는 화면(Manage.razor)
색상을 수정할 수 있는 관리 화면을 만듭니다./manage
에 액세스하면 이 화면이 표시됩니다.id:main
에 비해 변경background-Color
을 통해 전체 페이지의 배경색을 동적으로 바꿀 수 있다.
Manage.razor@page "/manage"
<div id="main" style=@colorClass.ColorStr>
<div class="content-row">
@foreach(var colorName in ColorNames)
{
<button class="btn " style="background-color:@colorName;width:150px"
@onclick=@(_=>SetStyle(colorName))>@colorName</button>
}
</div>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
string[] ColorNames = new string[0];
protected override void OnInitialized()
{
// ConsoleColorから色名を取得
ColorNames = Enum.GetNames(typeof(ConsoleColor));
}
void SetStyle(string name)
{
// ここの変更で、背景色が変わる
colorClass.ColorStr = "background-Color:" + name;
}
}
클라이언트 화면(Index.razor)
조작된 한쪽은 /
방문할 때 표시되는 화면이다.관리 화면과 마찬가지로 동적 변경 가능ID:main
의background-Color
.
Index.razor@page "/"
<div id="main" style=@colorClass.ColorStr>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
}
최후
Blazor Server-side 애플리케이션은 세션SignalR
의 상태 변화가 발생할 때마다 데이터 전송을 하지만 변경된 부분만 전송하기 때문에 전송량이 크지 않다.예를 들어 이 응용 프로그램의 경우 색의 변화로 인해 연결된 목적지로 전송되는 정보량은 약 100Byte이다.
이번에는 언뜻 보기에는 JavaScript
의 앱을 사용한 것 같지만 JavaScriptレス
로 쓸 수 있다!그리고 놀랍게도 인코딩이 적은 부분은 블레이저의 장점
Reference
이 문제에 관하여(Blazor Server-side로 제작된 손전등 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kimuradesu/items/4f4456bb8e4f563bb0e1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@page "/manage"
<div id="main" style=@colorClass.ColorStr>
<div class="content-row">
@foreach(var colorName in ColorNames)
{
<button class="btn " style="background-color:@colorName;width:150px"
@onclick=@(_=>SetStyle(colorName))>@colorName</button>
}
</div>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
string[] ColorNames = new string[0];
protected override void OnInitialized()
{
// ConsoleColorから色名を取得
ColorNames = Enum.GetNames(typeof(ConsoleColor));
}
void SetStyle(string name)
{
// ここの変更で、背景色が変わる
colorClass.ColorStr = "background-Color:" + name;
}
}
조작된 한쪽은
/
방문할 때 표시되는 화면이다.관리 화면과 마찬가지로 동적 변경 가능ID:main
의background-Color
.Index.razor
@page "/"
<div id="main" style=@colorClass.ColorStr>
</div>
@code
{
[CascadingParameter(Name="Color")]
protected ColorClass colorClass { get; set; }
}
최후
Blazor Server-side 애플리케이션은 세션SignalR
의 상태 변화가 발생할 때마다 데이터 전송을 하지만 변경된 부분만 전송하기 때문에 전송량이 크지 않다.예를 들어 이 응용 프로그램의 경우 색의 변화로 인해 연결된 목적지로 전송되는 정보량은 약 100Byte이다.
이번에는 언뜻 보기에는 JavaScript
의 앱을 사용한 것 같지만 JavaScriptレス
로 쓸 수 있다!그리고 놀랍게도 인코딩이 적은 부분은 블레이저의 장점
Reference
이 문제에 관하여(Blazor Server-side로 제작된 손전등 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kimuradesu/items/4f4456bb8e4f563bb0e1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Blazor Server-side로 제작된 손전등 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kimuradesu/items/4f4456bb8e4f563bb0e1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)