BlazorでのTodoリスト表示と編集機能|ASP.NET×Blazor入門 11.3
11.3 コンポーネント分割、リスト表示、編集機能
本セクションでは、前セクションで作成したサービスを活用し、Todoリストの表示・追加・編集機能をコンポーネントとして分割して実装します。 UIの責務を整理しながら、再利用しやすい構成を意識します。
1. コンポーネント構成の概要
- TodoList.razor: 全体のリスト表示と操作画面
- TodoItemRow.razor: 単一Todoの表示と編集
- TodoForm.razor: 追加・編集フォーム
2. TodoList.razor の実装
@inject ITodoService TodoService
@if (todos == null)
{
読み込み中...
}
else
{
<table class="table">
<thead><tr><th>タイトル</th><th>操作</th></tr></thead>
<tbody>
@foreach (var item in todos)
{
<TodoItemRow Item="item" OnUpdated="LoadTodos" />
}
</tbody>
</table>
}
@code {
List<TodoItem>? todos;
protected override async Task OnInitializedAsync()
{
await LoadTodos();
}
async Task LoadTodos()
{
todos = await TodoService.GetTodosAsync();
}
}
3. TodoItemRow.razor
@using System.ComponentModel.DataAnnotations
@inject ITodoService TodoService
@code {
[Parameter] public TodoItem Item { get; set; } = default!;
[Parameter] public EventCallback OnUpdated { get; set; }
bool isEditing = false;
string editedTitle = "";
void StartEdit()
{
isEditing = true;
editedTitle = Item.Title;
}
async Task Save()
{
Item.Title = editedTitle;
await TodoService.UpdateTodoAsync(Item);
isEditing = false;
await OnUpdated.InvokeAsync();
}
async Task Delete()
{
await TodoService.DeleteTodoAsync(Item.Id);
await OnUpdated.InvokeAsync();
}
}
@if (isEditing)
{
}
else
{
@Item.Title
}
4. TodoForm.razor
@inject ITodoService TodoService
@code {
[Parameter] public EventCallback OnTodoAdded { get; set; }
string newTitle = "";
async Task AddTodo()
{
if (!string.IsNullOrWhiteSpace(newTitle))
{
await TodoService.AddTodoAsync(new TodoItem { Title = newTitle });
newTitle = "";
await OnTodoAdded.InvokeAsync();
}
}
}
このようにUIを小さなコンポーネントに分割することで、保守性・テスト性が高まり、Blazorの特徴を活かした柔軟な設計が可能になります。 次のセクションでは、検索・フィルター、状態保持 に進み、アプリをさらに実用的に進化させます。
2025-05-19
下田 昌平
開発に関するインプットをアウトプットしています。検索ログ
Blazor テスト 857
Blazor API連携 832
Blazor リスト表示 820
Blazor 自動化 766
Blazor JSON表示 762
HTMLとC 762
Razor入門 755
Blazor 運用 735
AIとPython 727
フォルダ構成 727
Blazor データ取得 722
Blazor エラー処理 718
Blazor 初期処理 715
Blazor サーバー通信 714
フォーム入力 713
Python入門 710
Blazor 非同期通信 708
使い分け 703
HttpClient 例外処理 697
Blazor 非同期処理 695
.NET HttpClient 使い方 692
入門 691
依存性注入 687
API呼び出し Blazor 684
Blazor入門 672
UI操作 672
Blazor コンポーネント初期化 671
HttpClient 使い方 666
Pythonとは 660
bUnit使い方 640
開発・技術相談
システム開発や技術検証、要件定義の作成、アーキテクチャ設計、 テスト設計、運用設計まで、一気通貫で支援しています。 企画段階の「まず相談したい」レベルから、実装・運用まで 幅広く対応できますので、お気軽にお問い合わせください。
お問い合わせ