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 テスト 573
Blazor API連携 544
Blazor リスト表示 532
Blazor JSON表示 520
HTMLとC 506
Blazor 自動化 489
Razor入門 473
Blazor エラー処理 469
Blazor サーバー通信 466
Blazor 運用 460
Blazor 非同期通信 460
Python入門 460
フォーム入力 459
Blazor 初期処理 457
Blazor データ取得 456
AIとPython 454
フォルダ構成 443
Blazor 非同期処理 442
入門 441
使い分け 437
HttpClient 例外処理 427
.NET HttpClient 使い方 425
API呼び出し Blazor 425
Blazor コンポーネント初期化 424
依存性注入 423
HttpClient 使い方 418
Blazor入門 413
UI操作 405
Pythonとは 403
bUnit使い方 401
開発・技術相談
システム開発や技術検証、要件定義の作成、アーキテクチャ設計、 テスト設計、運用設計まで、一気通貫で支援しています。 企画段階の「まず相談したい」レベルから、実装・運用まで 幅広く対応できますので、お気軽にお問い合わせください。
お問い合わせ