実践練習: タスク管理アプリケーション

Qwik フレームワークを用いた実践練習の作成について学びます。ここでは、基本的なタスク管理アプリケーションを例に、アプリケーションの設計、機能の実装、そしてそれらを組み合わせて動作する完全なアプリケーションの作成方法を説明します。

アプリケーションの概要

このタスク管理アプリケーションでは、ユーザーは以下の操作を行うことができます:

  • タスクの作成
  • タスクのリスト表示
  • タスクの完了マーク
  • タスクの削除

アプリケーションのコンポーネント設計

1. タスク入力フォームコンポーネント

  • 目的: 新しいタスクを入力して追加するためのフォーム。
  • 機能: テキスト入力と「追加」ボタンを含む。

2. タスクリストコンポーネント

  • 目的: 追加されたタスクをリスト表示する。
  • 機能: 各タスクに対して、完了チェックボックスと削除ボタンを含む。

3. タスクアイテムコンポーネント

  • 目的: 個々のタスクを表示する。
  • 機能: タスクの内容、完了状態のチェックボックス、削除ボタンを含む。

実装ステップ

ステップ 1: タスク入力フォームの実装

// src/components/TaskInput.tsx
import { component$, useStore } from '@builder.io/qwik';

export const TaskInput = component$((props) => {
  const state = useStore({
    task: '',
  });

  return (
    <form
      onSubmit$={(event) => {
        event.preventDefault();
        props.onAddTask(state.task);
        state.task = ''; // 入力フィールドをクリア
      }}
    >
      <input
        type='text'
        value={state.task}
        onInput$={(event) => (state.task = event.target.value)}
        placeholder='新しいタスクを入力'
      />
      <button type='submit'>追加</button>
    </form>
  );
});

ステップ 2: タスクリストの実装

// src/components/TaskList.tsx
import { component$, useStore } from '@builder.io/qwik';
import { TaskItem } from './TaskItem';

export const TaskList = component$(() => {
  const state = useStore({
    tasks: [],
  });

  return (
    <div>
      {state.tasks.map((task, index) => (
        <TaskItem key={index} task={task} />
      ))}
    </div>
  );
});

ステップ 3: タスクアイテムの実装

// src/components/TaskItem.tsx
import { component$, useStore } from '@builder.io/qwik';

export const TaskItem = component$((props) => {
  const state = useStore({
    isCompleted: props.task.isCompleted,
  });

  return (
    <div>
      <input
        type='checkbox'
        checked={state.isCompleted}
        onChange$={() => (state.isCompleted = !state.isCompleted)}
      />
      <span>{props.task.content}</span>
      <button onClick$={() => props.onDeleteTask(props.task.id)}>削除</button>
    </div>
  );
});