前回のステップ3で「タスクの追加と復元」機能を実装しました。 しかし、現在はタスクの完了状態(チェックボックス)を切り替えても、その状態がlocalStorageに保存されません。
今回は、タスクの完了状態を切り替えた時も自動的にlocalStorageに保存し、ページを再読み込みしても完了状態が維持される機能を実装します。
現在の問題:
実装後の状態:
まず、現在のtoggleTask関数がどのように動作しているかを確認します。
// 現在のtoggleTask関数(localStorage保存なし)
function toggleTask(id) {
// 指定されたIDのタスクを見つけて完了状態を切り替え
tasks.forEach(function (task) {
if (task.id === id) {
task.completed = !task.completed;
console.log(`🔄 タスク「${task.text}」の完了状態を切り替えました`);
}
});
// 画面表示を更新
renderTasks();
updateProgress();
}
toggleTask関数にlocalStorage保存機能を追加します。
function toggleTask(id) {
// 指定されたIDのタスクを見つけて完了状態を切り替え
tasks.forEach(function (task) {
if (task.id === id) {
task.completed = !task.completed;
console.log(`🔄 タスク「${task.text}」の完了状態を${task.completed ? '完了' : '未完了'}に切り替えました`);
}
});
// 【穴埋め①】完了状態の変更をlocalStorageに保存する関数を呼び出す(20文字)
____________________;
// 画面表示を更新
renderTasks();
updateProgress();
console.log("💾 完了状態の変更をlocalStorageに保存しました");
}
実装完了後、以下の手順で動作確認を行います。
saveTasksToStorage()
関数を再利用します。completed
プロパティ)が変更された直後に、saveTasksToStorage()
を呼び出してlocalStorageに最新の状態を保存する必要があります。toggleTask
関数内で、task.completed = !task.completed;
の行のすぐ後が適切な呼び出し場所です。addTask
関数でのsaveTasksToStorage()
の使われ方も参考にしてください。function toggleTask(id) {
// 指定されたIDのタスクを見つけて完了状態を切り替え
tasks.forEach(function (task) {
if (task.id === id) {
task.completed = !task.completed;
console.log(`🔄 タスク「${task.text}」の完了状態を${task.completed ? '完了' : '未完了'}に切り替えました`);
}
});
// 完了状態の変更をlocalStorageに保存
saveTasksToStorage(); // この行を追加
// 画面表示を更新
renderTasks();
updateProgress();
console.log("💾 完了状態の変更をlocalStorageに保存しました");
}
このステップの修正により、タスクの「完了状態」もlocalStorageに保存・復元されるようになり、アプリケーションのデータ永続性がさらに向上しました。ユーザーがタスクのチェック状態を変更した後、ページを再読み込みしてもその状態が保持されます。
JavaScriptの配列やオブジェクトの内容(例えば、タスクオブジェクトのcompleted
プロパティ)を変更した場合、その変更をlocalStorageに反映させるためには、再度JSON.stringify()
で全体のデータを文字列化し、localStorage.setItem()
で保存し直す必要があります。saveTasksToStorage()
関数がこの役割を担っています。
ユーザーが行う操作(タスク追加、完了状態の切り替え、タスク削除など)によってアプリケーションのデータが変更される場合、その都度saveTasksToStorage()
のような関数を呼び出して、変更後の最新データをlocalStorageと同期させることが、データの一貫性を保つための基本です。
補足資料/localStorage_API詳解.md
補足資料/JSON操作詳解.md
補足資料/イベント駆動プログラミング基礎.md
(もしあれば)実装が完了したら、以下の手順で動作を確認しましょう。
🔄 タスク「(タスク名)」の完了状態を完了に切り替えました
と表示されるか。💾 完了状態の変更をlocalStorageに保存しました
と表示されるか。completed
プロパティが true
に更新されているか。ステップ4でタスク完了状態の永続化ができました。次のステップ5では、タスク削除操作もlocalStorageに正しく反映させ、CRUD操作(作成・読み取り・更新・削除)の全てでlocalStorageとの同期を完成させます。