1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

preactのToDoアプリをTypescriptで実装するサンプル

Posted at

TypeScript ✕ preact のToDoアプリサンプル

環境の構築手順

preact-cliのインストール

コマンドプロンプトまたはターミナルを開いて、以下のコマンドを実行し、Preact CLIをインストールする

npm install -g preact-cli

プロジェクトの作成

Preact CLIを使用して、TypeScriptでのプロジェクトを作成するため、以下のコマンドを実行する

preact create typescript my-todo-app
cd my-todo-app

パッケージのインストール

作成されたプロジェクトディレクトリに移動し、必要な依存関係をインストールする。

yarn install

ToDoアプリの実装

src/components/app.tsxを以下のように編集する

import { h, FunctionComponent } from 'preact';
import { useState } from 'preact/hooks';

type Todo = {
  id: number;
  text: string;
  completed: boolean;
};

const App: FunctionComponent = () => {
  const [todos, setTodos] = useState<Todo[]>([]);
  const [input, setInput] = useState<string>('');

  const addTodo = () => {
    if (input.trim() !== '') {
      setTodos([
        ...todos,
        { id: Date.now(), text: input.trim(), completed: false },
      ]);
      setInput('');
    }
  };

  const toggleTodo = (id: number) => {
    setTodos(
      todos.map((todo) =>
        todo.id === id ? { ...todo, completed: !todo.completed } : todo
      )
    );
  };

  const deleteTodo = (id: number) => {
    setTodos(todos.filter((todo) => todo.id !== id));
  };

  return (
    <div>
      <h1>Todoアプリ</h1>
      <input
        type="text"
        value={input}
        onInput={(e) => setInput((e.target as HTMLInputElement).value)}
      />
      <button onClick={addTodo}>追加</button>
      <ul>
        {todos.map((todo) => (
          <li key={todo.id} style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>
            <input
              type="checkbox"
              checked={todo.completed}
              onChange={() => toggleTodo(todo.id)}
            />
            {todo.text}
            <button onClick={() => deleteTodo(todo.id)}>削除</button>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default App;

実行

以下のコマンドを実行し、ローカルサーバ上でWebアプリを表示する

yarn dev
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?