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 自動化 354
Blazor API連携 351
Blazor JSON表示 342
HTMLとC 337
Blazor エラー処理 321
Razor入門 321
Python入門 320
Blazor データ取得 318
Blazor 初期処理 317
Blazor テスト 313
Blazor 運用 310
Blazor リスト表示 308
入門 307
.NET HttpClient 使い方 303
Blazor 非同期通信 303
API呼び出し Blazor 302
Blazor サーバー通信 301
Blazor コンポーネント初期化 299
Blazor 非同期処理 299
使い分け 298
フォーム入力 296
HttpClient 使い方 294
依存性注入 291
HttpClient 例外処理 290
bUnit使い方 290
Blazor入門 284
UI操作 274
フォルダ構成 274
AIとPython 262
Pythonとは 257
開発・技術相談
システム開発や技術検証、要件定義の作成、アーキテクチャ設計、 テスト設計、運用設計まで、一気通貫で支援しています。 企画段階の「まず相談したい」レベルから、実装・運用まで 幅広く対応できますので、お気軽にお問い合わせください。
お問い合わせ