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
下田 昌平
開発に関するインプットをアウトプットしています。Categories
Search Logs
Blazor API連携 420
Blazor JSON表示 415
HTMLとC 414
Blazor テスト 405
Blazor 自動化 401
Blazor リスト表示 400
Blazor エラー処理 375
Razor入門 375
Blazor 初期処理 370
Python入門 364
Blazor データ取得 363
Blazor 運用 359
Blazor 非同期通信 359
フォルダ構成 354
フォーム入力 350
入門 350
API呼び出し Blazor 347
Blazor サーバー通信 347
Blazor 非同期処理 347
AIとPython 346
HttpClient 例外処理 346
.NET HttpClient 使い方 343
使い分け 342
HttpClient 使い方 340
Blazor コンポーネント初期化 338
依存性注入 337
bUnit使い方 333
Blazor入門 326
UI操作 323
Pythonとは 311
開発・技術相談
システム開発や技術検証、要件定義の作成、アーキテクチャ設計、 テスト設計、運用設計まで、一気通貫で支援しています。 企画段階の「まず相談したい」レベルから、実装・運用まで 幅広く対応できますので、お気軽にお問い合わせください。
お問い合わせ