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