新增唯一項目
輸入文字後建立含唯一 id、text、done 的 TODO。
CHAPTER 26 · 180 MINUTES
把 TODO 當成一箱有編號的便條:先改資料、保存整箱,再由 render 依資料重畫畫面。
LEARNING GOALS
輸入文字後建立含唯一 id、text、done 的 TODO。
依 id 找到資料,改 done、保存並重畫。
刪除後重新整理,localStorage 仍維持最新狀態。
輸入:第 25 章產物:完成明確標示非真實登入的 Auth 與權限概念模擬
本章輸出:完成可新增、切換與刪除且能保存的本機待辦事項 App
產物類型:mainline;後續用途:第 27 章、第 28 章
PROBLEM & ANALOGY
第 25 章用 uid 辨認資料;本章用唯一 id 找到每張便條。DOM 像展示櫃,todos 陣列才是本頁資料,localStorage 是留在這台瀏覽器的收納箱。
本章要解決:只改 DOM 會在 render 後消失,只改陣列不 save 會在重新整理後復活。
合回共同作品:TODO A 是第 27 章同步佇列的本機可靠基礎。
SCOPE
CRUD、唯一 id、陣列 state、render、save/load 與 localStorage。
JSON stringify/parse 是資料進出 localStorage 的轉換。
雲端同步、多人衝突、資料庫 schema 與離線優先架構。
CORE IDEAS
DEBUGGING
課堂刻意錯誤:建立重複 id;或 filter 後只 render 沒 save,讓刪除項目重新整理後復活。
先查:查是否只 render 沒 save,並看 Application 內容。
先查:確認事件 id 與資料內 id 型別一致。
先查:檢查 filter 新陣列、save 時機與 render 責任。
PRACTICE CONTRACT
檔案:script.js
位置:loadTodos()、addTodo()、createTodoElement()、render()
結果:新增唯一 id 項目,輸入只會成為文字節點
檔案:script.js
位置:toggleTodo()
結果:點擊完成可切換 done 並保存
檔案:script.js
位置:removeTodo()
結果:刪除後重整頁面不會復活
EVIDENCE
這筆 TODO 的 id 是 ______;我先改 ______,再由 ______ 保存,最後由 ______ 畫回。
localStorage 只證明本機保存;不要把它描述成帳號同步、Firebase 或 GAS。
新增兩筆、切換其中一筆、刪除另一筆,再重新整理;截圖需同時看到清單與 Application 面板保存內容。
下一章:把每次本機變更放入待同步 queue,練習失敗保留與重試。